c# - 如何删除绑定(bind)到 bool [] 数组的复选框的 Click 处理程序

标签 c# wpf xaml mvvm

数据上下文类:

class ImageHandler : INotifyPropertyChanged
{
    bool[] directions = new bool[8];

    public bool[] Directions { get { return directions; } }

    // ...
}

XAML:
<UniformGrid Columns="8">
    <CheckBox Content=" N" IsChecked="{Binding Path=Directions[0]}" Click="CheckBox_Click"/>
    <CheckBox Content="NW" IsChecked="{Binding Path=Directions[1]}" Click="CheckBox_Click"/>
    <CheckBox Content=" W" IsChecked="{Binding Path=Directions[2]}" Click="CheckBox_Click"/>
    <!-- ... -->
</UniformGrid>

后面的代码:
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
     imageHandler.UpdateImage();
}

所以,我在数据上下文类中有 bool 数组,还有 8 个复选框,绑定(bind)到每个数组成员。 Click 事件处理程序根据新的 directions 重新计算图像数组状态。如何更改此代码以删除 CheckBox_Click事件处理程序,使其根据 MVVM 模式工作?我需要一种方法来检测 directions 中所做的更改数组,无需编写事件处理程序。

最佳答案

然后 WPF 复选框具有 Command 属性,您可以将其绑定(bind)到 View 模型中的 ICommand(使用 RelayCommand),还可以传递参数以查看更新了哪个复选框(在您的情况下为绑定(bind)项)。

我的另一个建议是也更改 XAML,如果您确定您的 View 模型将决定您的 UniformGrid 中显示的内容,即如果它始终呈现来自 View 模型的数据,那么您还可以在 UniformGrid 中定义 ItemsControl,然后为 ItemTemplate 定义一个模板这样您也不需要将复选框与 XAML 中定义的索引绑定(bind),以后也不需要维护它

关于c# - 如何删除绑定(bind)到 bool [] 数组的复选框的 Click 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18298143/

相关文章:

c# - 用C#提取html元素的值

c# - 安卓 C# TextView.setGravity

c# - MVC onfocusout 事件未触发

c# - 尽管 namespace 中存在类,但获取 XMLNS 名称未找到错误

c# - WPF DataGrid - 如何在验证错误后取消编辑行?

C# & MySQL 多字段搜索

c# - 为什么我的 SplitView 的内容和 Pane 在同一区域?

c# - 解决 ASP.NET 中不明确的名称

c# - 程序化数据绑定(bind)

wpf - 在WPF中为什么PasswordBox和TextBox是不同的控件?