나는 각각 Item Attributes
의 컬렉션을 포함하는 뷰 모델을 가지고 있으며, 각각은 이미지 경로를 포함합니다. 컬렉션의 항목 속성은 0 .. N
입니다.인덱싱 된 속성의 템플릿 만들기
내보기의 스택 패널에는 세 개의 동일한 이미지 컨트롤이 있습니다. 각 이미지 제어 항목 속성 화상의 경로에 결합되어
화상 제어 1은 첫번째 아이템 속성의 이미지 경로에 결합 된- (ItemAttributes에 위치한 [0] 이미지입니다)
- 화상 제어 2에 바인딩 (ItemAttributes 1 이미지입니다 있음) 2 항목 속성의 이미지 경로 3 개 이상의 속성이있는 경우 제어 (3) 3 항목 속성의 이미지 경로에 바인딩
- 이미지는
(ItemAttributes [2] 이미지입니다 있음) , 무시됩니다. 0-2 특성 (이미지 컨트롤 중 하나 이상이 null에 바인딩됨을 의미 함)을 가질 가능성을 처리하기 위해 this post에 표시된 오류를 제공하므로 다음과 같은 데이터 트리거를 추가했습니다.
또한 인덱스를 벗어나는 문제를 방지하기 위해 필자는 뷰 모델의 항목 특성을 세 가지 속성으로 분할했습니다. (처음에는 String.Empty를 반환했지만 null로 변경하여 데이터 트리거) :
public string Attribute1
{
get { return _item.Attributes.Count > 0 ? _item.Attributes[0].Image : null; }
}
public string Attribute2
{
get { return _item.Attributes.Count > 1 ? _item.Attributes[1].Image : null; }
}
public string Attribute3
{
get { return _item.Attributes.Count > 2 ? _item.Attributes[2].Image : null; }
}
내 문제는이 데이터 트리거가 모든 세 가지 이미지 속성과 해당 이미지 컨트롤 (폭, 높이, 여백 등의 다른 속성과 함께). 그래서 저는 그것을 스타일에 넣고 그것을 정적 자원으로 참조한다고 생각합니다. 다른 이름 (Attribute1, Attribute2, Attribute3)으로 세 개의 다른 속성이있는 경우에는 작동하지 않습니다. 그래서 지금은 이런 식으로 일을 붙어하고 다음 속성 1이 속성 2와 Attribute3로 치환 제외
<Image>
<Image.Style>
<Style TargetType="Image">
<Setter Property="Source" Value="{Binding Attribute1}" />
<Setter Property="Width" Value="44" />
<Setter Property="Height" Value="45" />
<Setter Property="Margin" Value="5" />
<Style.Triggers>
<DataTrigger Binding="{Binding Attribute1}" Value="{x:Null}">
<Setter Property="Source" Value="{x:Null}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
이 다른 두 이미지 컨트롤에 대해 반복된다.
그래서 나는 내가 이미지 컨트롤에 관심이 인덱스가 외부 바인딩 specifcy 다음 대신 컬렉션에 바인딩 할 수있는 방법이 있는지 등
<DataTrigger Binding="{Binding Attributes}" Value="{x:Null}">
<Setter Property="Source" Value="{x:Null}"/>
</DataTrigger>
로, 궁금 ...되었다 템플릿 (데이터 트리거에 매개 변수를 전달하는 것 같아요).
어떤 아이디어라도 가능하지 않다면 다른 접근법이 있습니까?
야, 왜 당신은 모든 너무 복잡하게 수행합니다는 _attributes 백업 필드 SmartObservableCollection 속성 (사용자 정의 ObservableCollection에와 AddRange 방법과 몇 가지 다른 케이크) 속성을 무엇입니까? 'ObservableCollection '에 바인드 된'ItemsControl'을 사용하고'Attribute1, Attribute2, Attribute3 ...'을 잊어 버리십시오. –
@HighCore : 저는 WPF 세계에서 여전히 아주 초록색이어서 항상 가장 쉽거나 뭔가를하는 가장 적절한 방법. –