每次使用mvvm,wpf从Checkedlistbox中选择项目时要知道的事件或命令

时间:2012-09-26 13:13:55

标签: wpf mvvm prism-4

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>

感谢

2 个答案:

答案 0 :(得分:1)

如果userList中的项目实施INotifyPropertyChanged,您的视图模型可以为列表中的每个项目订阅PropertyChanged事件(确保它使用weak eventsIsChecked属性更改为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
    }
}