연장 ItemsControl 및 PrepareContainerForItemOverride
무시에서 대체 템플릿을 적용 할 수 있습니다.
는
protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
if (!object.ReferenceEquals(element, item))
{
ContentPresenter presenter = element as ContentPresenter;
ContentControl control = null;
if (presenter == null)
{
control = element as ContentControl;
if (control == null)
{
return;
}
}
DataTemplate itemTemplate = null;
if ((this.ItemTemplate != null) && (this.DisplayMemberPath != null))
{
throw new InvalidOperationException("Cannot set ItemTemplate and DisplayMemberPath simultaneously");
}
if (!(item is UIElement))
{
if (this.ItemTemplate != null)
{
if(this.AlternateItemTemplate != null && ((alternationIndex % 2)) == 1)
itemTemplate = this.AlternateItemTemplate;
else
itemTemplate = this.ItemTemplate;
alternationIndex++;
}
}
if (presenter != null)
{
if (itemTemplate != null)
{
presenter.Content = item;
presenter.ContentTemplate = itemTemplate;
}
else
{
presenter.SetBinding(ContentControl.ContentProperty, new Binding(this.DisplayMemberPath));
}
}
else
{
control.Content = item;
control.ContentTemplate = itemTemplate;
}
}
}
내가 alternationIndex
을 사용하고 방법은 매우 정확하지 않습니다 변경 될 필요가 있지만 그렇지 않으면이 작동합니다.
안녕하세요 Jobi 고마워, 내가 명확하게 질문을 업데이 트되었습니다. 이 솔루션이 VM의 기능에 의존하기를 원하지 않습니다. –
ViewModel은 데이터가 표시되는 방법을 결정해서는 안됩니다. –
VM의 전체 점으로 표시된 약간의 잘못된 점은 데이터 표시 방법을 결정하는 것입니다. Visibility를 나타내는 부울, 상태를 나타내는 enum은 항상 발생합니다. –