如何创建具有有用绑定的自定义四按钮控件?

时间:2019-05-01 17:00:00

标签: c# wpf mvvm

我正在尝试基于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之类的有效示例,我将不胜感激。

我对问题进行了编辑,使其更具通用性/概念性。

顺便说一句,这里是有史以来的第一个代码发布,请宽大,我将感谢您对发布格式进行改进的所有建议。

0 个答案:

没有答案