当我只想更改绑定数据时,如何防止触发 ListView 选择更改事件?
为了澄清,我有这样的课程:
public class MyCollectionViewModel : BindableBase
{
public ObservableCollection<MyItemViewModel> MyItems { get; set; }
private MyItemViewModel _selectedItem;
public MyItemViewModel SelectedItem
{
get { return _selectedItem; }
set
{
this.SetProperty(ref _selectedItem, value);
if (_selectedItem != null)
{
// Do something...
}
}
}
...
}
public class MyItemViewModel : BindableBase
{
private bool _isSelected;
public bool IsSelected
{
get { return _isSelected; }
set { this.SetProperty(ref _isSelected, value); }
}
...
}
使用以下数据模板:
<DataTemplate x:Key="MyItemTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<CheckBox Margin="10" IsChecked="{Binding Path=IsSelected, Mode=TwoWay}" />
<Border Grid.Column="1">
...
</Border>
</Grid>
</DataTemplate>
...并像这样使用:
<ListView ItemsSource="{Binding Source={StaticResource SessionsViewSource}}"
ItemTemplate="{StaticResource MyItemTemplate}"
SelectedItem="{Binding Sessions.SelectedItem, Mode=TwoWay}"
IsSwipeEnabled="False" />
在某种程度上可视化 ListView:
+--------------------- + [x] myItem1 +--------------------- + [ ] myItem2 +---------------------
用户可以选中和取消选中复选框。问题是,如果有一个现有的选择,当IsSelected
绑定更新时,选择绑定也会发生。
有没有简单的方法来解决这个问题?我想尽可能地坚持使用 MVVM。