В настоящее время я изучаю, как реализовать команды в проектах C#/WPF. Предположим, что у меня есть класс MyClass
с простой командой MyCommand
.Метод вызова после выполнения дочерней команды
public class MyClass
{
private RelayCommand _myCommand;
public ICommand MyCommand
{
get
{
if (_myCommand == null)
_myCommand = new RelayCommand(_ => ExecuteMyCommand());
return _myCommand;
}
}
private void ExecuteMyCommand()
{
// Do work...
}
}
Теперь предположим, что я создал ObservableCollection<MyClass>
в модели представления, который связан с ListView. ListView имеет GridViewColumn с кнопками, привязанными к MyCommand. Все отлично работает.
public class MyViewModel
{
private ObservableCollection<MyClass> _myCollection;
public ObservableCollection<MyClass> MyCollection
{
get { return _myCollection; }
set
{
_myCollection = value;
RaisePropertyChanged("MyCollection");
}
}
public void Refresh()
{
// Do work to refresh MyCollection to it's "live" state
}
}
Теперь мне нужно вызвать метод Refresh() на модели представления после того, как один из объектов в MyCollection выполняющей МояКоманда, но я не знаю, как подойти к этой ситуации.
вещи я попытался:
- Добавление ссылки на модели представления в процессе строительства MyClass, позволяя команду для вызова Refresh() на с помощью ссылки модели представления то, когда команда выполняет. Это работает отлично, но мне действительно не нравится код - он чувствует себя грязным, чтобы ссылаться на конкретную модель представления, особенно когда он используется в других частях программы.
Вещи, которые я рассмотрел:
- Изменение Refresh() для метода расширения для
ObservableCollection<MyClass>
, добавив ссылочный свойство, как упоминалось ранее, но ссылки на ObservableCollection вместо модели представления, которые не чувствовали бы себя как беспорядочный, но все еще не очень совершенный в моих глазах ...
Что было бы лучшим/правильным способом подойти к этой проблеме?
Я не вижу вопрос здесь ... – Ben
@Ben The вопрос был более или менее подразумеваемым «как мне следует продолжить?», но я добавил еще одну строку только для вас. – learningcs