数据上下文类复选框:如何删除点击处理程序绑定到bool []数组
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();
}
所以,我有数据上下文类中的布尔数组以及绑定到每个数组成员的8个复选框。根据新的directions
阵列状态,单击事件处理程序重新计算图像。我如何更改此代码以删除CheckBox_Click
事件处理程序,使其按照MVVM模式工作?我需要一种方法来检测在directions
数组中发生的更改,而无需编写事件处理程序。
你想在viewmodel中处理点击复选框吗?然后,WPF复选框具有Command属性,您可以将其绑定到视图模型中的ICommand(使用RelayCommand)并传递参数以查看更新了哪个复选框(在您的案例绑定项目中)。 – whoisthis
我的另一个建议是改变XAML,如果你确定你的viewmodel将决定在你的UniformGrid中显示什么,也就是说它总是呈现viewmodel的数据,那么你也可以在你的UniformGrid中定义ItemsControl,然后定义一个模板ItemTemplate,这样你也不需要将你的复选框与XAML中定义的索引绑定在一起,以后不再维护它 – whoisthis
@bjoshi - 对我来说实现ICommand是可以的,发布这个命令作为答案,我会接受它。 –