c# - 如何创建具有有用绑定的自定义四按钮控件?
问题描述
我正在尝试基于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 或其他东西的工作示例,我将非常感激。
我编辑了我的问题,使其更加通用/概念化。
顺便说一句,第一次在这里发布代码,请宽容,我将不胜感激任何和所有关于改进帖子格式的建议。
解决方案
推荐阅读
- javascript - 有没有办法在 android 上有一个 webview,我可以在页面加载之前注入 css?
- json - CA API Gateway XML 列表对 Json 的响应
- python - 如何在测试数据中选择与我在训练数据中选择的相同特征?
- android - 如何在 Android Studio 中使 Android App 兼容所有 6735 Android 设备
- python - 从 python 脚本更新谷歌表
- reactjs - TabPanel Material UI 不显示第二个面板
- javascript - 在 setTimeout() 之后单击 html 元素不起作用
- eslint - 在 VSCode settings.json 中将 ESlint 设置为格式化程序 - 正确的方法是什么?
- javascript - 如何在 Angular 函数中使用 JavaScript 触发 bootstrap5 data-bs-dismiss
- laravel - 加载特定的服务页面