Я начал внедрять MVVM для одного из моих приложений Silverlight. (Я не использую инструментарий).MVVM viewmodel свойство triggering update
На моей странице содержится раздел с двумя полями со списком. Выбор элемента в одной из этих комбинаций запускает поиск, который обновляет сетку, видимую ниже комбо.
Каждый выбранный элемент combo привязан к объекту в моей модели. Установщик этих свойств повышает значение свойства INotifyPropertyChanged и автоматически обновляет данные, привязанные к сетке.
Все было в порядке, пока не понадобилось добавить кнопку сброса, целью которой является сброс параметров поиска. I .: в каждом поле со списком не должно указываться ни один элемент, и сетка должна быть пуста.
- Если функция сброса в режиме просмотра обновляет поля поддержки, пользовательский интерфейс не будет отражать изменения, поскольку RaisePropertyChanged не будет вызываться.
- Если функция сброса в ViewModel обновляет свойства, пользовательский интерфейс будет отражать изменения, но сетка будет обновляться дважды: когда переустановка первого свойства обнулить, а также для второго
Любой помощи приветствуется
/// <summary>Selected user.</summary>
public User SelectedUser
{
get { return _selectedUser; }
set
{
_selectedUser = value;
RaisePropertyChanged("SelectedUser");
UpdateProducts();
}
}
/// <summary>Selected product category.</summary>
public ProductCategory SelectedProductCategory
{
get { return _selectedProductCategory; }
set
{
_selectedProductCategory = value;
RaisePropertyChanged("SelectedProductCategory");
UpdateProducts();
}
}
// Reset option 1
public void Reset()
{
_selectedUser = null;
_selectedProductCategory = null;
_products = null;
}
// Reset option 2
public void Reset()
{
SelectedUser = null;
SelectedProductCategory = null;
// No need to update Products which has already been updated twice...
}
Спасибо за ваш ответ, я согласен с вами.Это не только теоретически «неверно», если мне удастся изменить имя свойств, рефакторинг не сможет обновить связанный с ним RaisePropertyChanged, это нормально, если они находятся в одном месте (средство настройки свойств), но мне кажется опасно, что они доступны в другом месте –
Не начинайте меня с уведомлений об изменении свойств с помощью строк ... Ох, такой хрупкий и неэффективный. Вы думаете, что ребята из Microsoft, определяющие основные API, будут немного ярче. –