2017-11-16 3 views
0

개체 컬렉션에 MyModel.cs가 있습니다. 컬렉션은 Some입니다. MyModel에는 Brush 유형 인 Color 속성이 있습니다.바인드 ItemSources의 속성에서 스트로크

색상은 현재 모두 빨간색입니다.

는 지금은
<MyControl: x:Name="control1" ItemsSource="{Binding Some}" Stroke="Red"> 

을하지만 당신은 내가 스트로크를 하드 참조하십시오. 내가 원하는 건 Stroke = "{Binding Some.Color}"

어떻게됩니까?

+0

사용자 정의 변환기와 함께 MultiBinding을 사용하거나 (컬렉션의 두 모델이 다른 색상을 선택할 때 - 선택할 수있는 경우) 또는 상위 수준 (컬렉션이있는 곳)으로 속성을 이동해야합니다. – Shcherban

+0

@Shcherban, 색상이 다른 경우 다른 컬렉션이 있습니다. 그래서 멀티 바인딩을 사용하지 않습니다. – Bigeyes

+0

좋아요, 그렇다면'Stroke = {Binding Some, Converter = SomeConverter}'와 같이 콜렉션의 첫 번째 항목에서 색상을 선택하고'return (value as IEnumerable )? '과 같은 간단한 방식으로 정규 바인딩을 사용할 수 있습니다. FirstOrDefault)?.색깔 ?? Colors.Red' – Shcherban

답변

2

컨트롤은 여러 개의 모델을 표시합니다. ,

<MyControl x:Name="control1" ItemsSource="{Binding Some}" Stroke="{Binding Some[0].Color}"> 

이는 처음MyModel 객체의 Color 속성에 Stroke 속성을 바인딩 : 당신이 그들 중 하나의 ColorStroke 속성을 설정하려는 경우 예를 들어, 어느 하나를 지정해야 Some 컬렉션에 인덱서가 있다고 가정합니다.

1

을 상속하는 경우 IsSynchronizedWithCurrentItem="True"을 입력하고 Some/Color에 바인딩합니다. 슬래시 또는 사선 (/는) 컬렉션에서 "현재 항목"에서 Color 속성을 사용하는 것을 의미합니다 :

<MyControl 
    IsSynchronizedWithCurrentItem="True" 
    x:Name="control1" 
    ItemsSource="{Binding Some}" 
    Stroke="{Binding Some/Color}" 
    /> 

이것은 스트로크를 위해 선택한 항목의 색상 브러시를 사용합니다. 당신은 당신이하려고하는 것에 대한 어떤 힌트도 제공하기를 꺼려합니다.하지만 그것은 공정한 추측입니다.

MyControlSelector에서 상속되지 않는 경우 mm8의 솔루션을 사용하십시오.