首页 > 解决方案 > 如何创建具有有用绑定的自定义四按钮控件?

问题描述

我正在尝试基于CivClicker在 WPF 中制作一个点击游戏, 现在主要只是一个克隆,但是......我希望在未来扩展这个概念。

主要是练习和探索更复杂的 MVVM 和 xaml 问题解决。正如您在链接中看到的那样,有很多重复按钮,我想以某种方式简化它们。

我目前的解决方案是垃圾,但它有点工作。它开始是每个唯一按钮的一个命令,不是很干净。然后,使用 CommandParameter,我将命令减少到每个建筑物对象一个,并让 CommandParameter 获取我想要购买的建筑物的数量,更简洁一些。在我当前的迭代中,我对所有与建筑物相关的购买按钮只有一个命令。我正在使用 Multibinding 绑定静态建筑类型和要购买的建筑数量。

我目前的 4 按钮购买机制是这样的。

        <StackPanel Orientation="Horizontal">
            <Button Command="{Binding BuyTentCommand}" Content="Build Tent" Width="120" ToolTip="2 skins, 2 wood: +1 max pop.">
                <Button.CommandParameter>
                    <MultiBinding Converter="{StaticResource MConverter}">
                        <Binding Source="1"/> //Amount of buildings
                        <Binding Source="0"/> //Building ID
                    </MultiBinding>
                </Button.CommandParameter>
            </Button>
            <Button Command="{Binding BuyTentCommand}" Content=" x10 " Margin="2,0">
                <Button.CommandParameter>
                    <MultiBinding Converter="{StaticResource MConverter}">
                        <Binding Source="10"/>
                        <Binding Source="0"/>
                    </MultiBinding>
                </Button.CommandParameter>
            </Button>
            <Button Command="{Binding BuyTentCommand}" Content=" x100 " Margin="2,0">
                <Button.CommandParameter>
                    <MultiBinding Converter="{StaticResource MConverter}">
                        <Binding Source="100"/>
                        <Binding Source="0"/>
                    </MultiBinding>
                </Button.CommandParameter>
            </Button>
            <Button Command="{Binding BuyTentCommand}" Content=" x1000 " Margin="2,0">
                <Button.CommandParameter>
                    <MultiBinding Converter="{StaticResource MConverter}">
                        <Binding Source="1000"/>
                        <Binding Source="0"/>
                    </MultiBinding>
                </Button.CommandParameter>
            </Button>
        </StackPanel>

重复那段代码 16 次(或更多),在任何情况下都不是很理想。如果有人可以向我展示如何将这样的东西变成单个可重用的 UserContol 或其他东西的工作示例,我将非常感激。

我编辑了我的问题,使其更加通用/概念化。

顺便说一句,第一次在这里发布代码,请宽容,我将不胜感激任何和所有关于改进帖子格式的建议。

标签: c#wpfmvvm

解决方案


推荐阅读