バインドされたデータのみを変更したい場合に、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にこだわりたいです。