Я установил ContentControl в правой части окна и задал элементы привязки контента (это тип ObservableCollection). Теперь я хочу достичь этого: если нет элемента, ContentControl выбирает первый DataTemplate и добавляет элемент в элементы, ContentControl будет выбирать второй DataTemplate для отображения некоторой информации.ContentControl.ContentTemplateSelector динамически выбирает шаблон
Как это:
Проблема заключается в том, когда я добавить один пункт в элементы, ContentControl didnot обновление и изменение DataTemplate, я попробовать режим, UpdateSourceTrigger и т.д. установлен, но не удалось. В ViewModel, после удаления элемента, я использую эти заявления, он будет хорошо работать < 1>:
private void ExecuteDeleteClientCommand()
{
...
if (DeleteClient(item))
{
ObservableCollection<MyViewModel> tmp = TabItems;
TabItems = null;
TabItems = tmp;
}
}
.
<ContentControl
ContentTemplateSelector="{StaticResource MyDataTemplateSelector}"
Content="{Binding Items}"/>
.
public class SingleClientDataTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item,
DependencyObject container)
{
ObservableCollection<MyViewModel> obj =
item as ObservableCollection<MyViewModel>;
if (null == obj || 0 == obj.Count)
{
return App.Current.FindResource("NullItemDataTemplate") as DataTemplate;
}
return App.Current.FindResource("DefaultDataTemplate") as DataTemplate;
}
}
Отредактировано: использование этот путь также не после удаления одного элемента:
RaisePropertyChanging(ItemsPropertyName);
RaisePropertyChanged(ItemsPropertyName);
, но мне интересно, почему это хорошо работает с < 1>.
Edited2 Это delcaration:
public const string ItemsPropertyName = "Items";
private ObservableCollection<MyViewModel> items = new ObservableCollection<MyViewModel>();
public ObservableCollection<SingleClientDetailViewModel> TabItems
{
get { return items; }
set
{
if (items == value) { return;}
RaisePropertyChanging(ItemsPropertyName);
items = value;
RaisePropertyChanged(ItemsPropertyName);
}
}
Вы реализовали «интерфейс INotifyPropertyChanged' в вашей модели представления и для' 'деталей собственности? – Sheridan
Я использую mvvmlight. Класс MyViewModel наследуется от ViewModelBase. ViewModelBase: ObservableObject: INotifyPropertyChanged. – SubmarineX