2

我正在将 MVVM 与 WPF 一起使用...我有一个带有一些项目的已选中列表框....每次检查一个项目时,我希望在 Viewmodel 中使用该项目...。是否有属性或命令或事件以便我可以用它来知道checkeditem...

这是我的xml...

   <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>

谢谢

4

2 回答 2

1

如果userList实现中的项目INotifyPropertyChanged,您的视图模型可以订阅PropertyChanged列表中每个项目的事件(确保它使用弱事件或正确取消订阅事件)并在IsChecked属性更改为时观察者true

或者,您可以在事件上使用事件触发器Checked来执行视图模型中的命令。

于 2012-09-26T13:27:30.320 回答
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
    }
}
于 2012-09-26T13:30:04.183 回答