Iam使用MVVM和WPF ...我有一个带有一些项目的checkedlistbox ....每次检查一个项目时,我希望该项目在Viewmodel中使用....是否有属性或命令或事件如此我可以用它来了解checkitem ...
这是我的xaml ......
<ListBox Grid.Row="9" Height="49" HorizontalAlignment="Left" Margin="0,30,0,0" Name="aasdasd" VerticalAlignment="Top" Width="205" SelectionMode="Multiple"
ItemsSource="{Binding userlist}" Grid.Column="1">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Name="chkuser" Content="{Binding Path=useritem}" IsChecked="{Binding IsChecked,Mode=TwoWay}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
感谢
答案 0 :(得分:1)
如果userList
中的项目实施INotifyPropertyChanged
,您的视图模型可以为列表中的每个项目订阅PropertyChanged
事件(确保它使用weak events当IsChecked
属性更改为true
时,或者正确取消订阅事件)和观察者。
或者,您可以在Checked
事件上使用事件触发器在视图模型中执行命令。
答案 1 :(得分:1)
您绑定到模型上的IsChecked
,因此您的viewModel可以只订阅该项目的PropertyChanged
事件,并在该属性更改时执行您想要的任何操作
public MyViewModel()
{
userList.CollectionChanged += userList_CollectionChanged;
}
void userList_CollectionChanged(object sender, CollectionChangedEventArgs e)
{
if (e.NewItems != null)
foreach(MyItem item in e.NewItems)
item.PropertyChanged += MyItem_PropertyChanged;
if (e.OldItems != null)
foreach(MyItem item in e.OldItems)
item.PropertyChanged -= MyItem_PropertyChanged;
}
void MyItem_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "IsChecked")
{
// Do whatever here
}
}