Я использую много разных ViewModel для объектов, которые я отображаю в списках флажков.Все подклассы (Жираф и Слон) наследуются от основного класса Млекопитающих.Для каждого списка флажков есть кнопка, чтобы отменить их выбор.Я хотел бы использовать универсальный метод, который работает со всеми подклассами.Я думал о том, чтобы передать использованную коллекцию ObservableCollection в команду, просто нажав кнопку. К сожалению, я не могу динамически распознать, какой это подкласс, и привести его правильно.
XAML
<ListBox SelectionMode="Multiple" ItemsSource="{Binding Path=Giraffes, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Path=Text}" IsChecked="{Binding Path=Checked}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button Content="Clear" Command="{Binding ClearSelection}" CommandParameter="{Binding Path=Giraffes}" />
MainViewModel
private ICommand _clearSelection;
public ICommand ClearSelection
{
get
{
return _clearSelection ?? new RelayCommand((x) =>
{
ObservableCollection<Giraffe> observableCollection = (ObservableCollection<Giraffe>) x;
foreach (var giraffe in giraffes)
{
giraffe.Checked = false;
}
});
}
}
ViewModels
public class MammalViewModel : BaseViewModel
{
private bool _checked;
public bool Checked
{
get => _checked;
set
{
if (value == _checked) return;
_checked = value;
OnPropertyChanged("Checked");
}
}
private string _text;
public string Text
{
get => _text;
set
{
if (value == _text) return;
_text = value;
OnPropertyChanged("Text");
}
}
}
public class GiraffeViewModel : MammalViewModel { }
public class ElephantViewModel : MammalViewModel { }