我在WPF C#项目中有一个CheckBoxes网格。每个CheckBox的Command
属性都绑定到我的WView.xaml文件中的CheckBoxChangedCommand
,如下所示:
<CheckBox Grid.Row="0" IsChecked="true" x:Name ="CheckBox0"
Command="{Binding CheckBoxChangedCommand}" />
<CheckBox Grid.Row="1" IsChecked="true" x:Name="CheckBox1"
Command="{Binding CheckBoxChangedCommand}" />
每次选中或取消选中其中一个CheckBox时,我都会调用CheckBoxChanged
。我将如何显示一个弹出窗口,其中显示1. CheckBox网格中的行号和CheckBox的名称(例如“CheckBox0”)和2. Checked值(true / false)复选框?
我的CheckBoxChangedCommand,在WViewModel.cs文件中,如下所示:
public ICommand CheckBoxChangedCommand
{
get
{
return new RelayCommand(param =>
{
MessageBox.Show("CheckBoxChanged!");
});
}
}
如何从IsChecked
内访问CheckBoxChanged
属性以及触发CheckBoxChanged
的CheckBox的行号?如何将数据从View传递到ViewModel?
答案 0 :(得分:1)
你肯定需要在这里做更多的绑定。
首先,您应该将Checkbox的IsChecked属性绑定到viewmodel上的属性。
其次,根据您对需要知道已选中复选框的行号的注释,我会说您可能需要通过数据绑定生成包含CheckBox的“行”,以便您可以通过将行表示为CheckBoxChangedCommand的CommandParameter的对象。
类似于:
<ListBox ItemsSource="{Binding MyItems}" />
然后在您的资源中:
<DataTemplate DataType="{x:Type local:MyItemType}">
<CheckBox IsChecked="{Binding IsChecked}"
Command="{Binding CheckChangedCommand}"
CommandParameter="{Binding}" />
</DataTemplate>
注意:你的CheckChangedCommand可能在主ViewModel上,而不是项目级ViewModel,所以你可能需要做一些其他类型的查找才能找到它 - 这个例子只是为了简单起见