2016-09-19 3 views
0

이름을 제공하지 않습니다 바인딩 속성으로 뷰 모델에 정의 :브러쉬 MVVM은 내가 MVVM 코드를 사용하여 브러시 내가 문자열 형식의 파일에서 색 이름을 읽고 변환의 경우 국경 배경에 대해 구속력을 가지고 색상

public Brush Background 
{ 
    get { return _background; } 
    set 
    { 
     this._background = value; 
     RaisePropertyChanged("Background"); 
    } 
} 

그리고 그것은으로 XAML에 액세스 할 수 있습니다 :

<Border Background="{Binding Background}"> 
    <Border.Style> 
     <Style TargetType="{x:Type Border}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Background}" Value="Red"> 
        <Setter Property="Height" Value="40"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Border.Style> 
</Border> 

국경은 적절하게 채색되어 있습니다. 문제는 없습니다.

DataTrigger는 설정 메서드에서 this._background의 값을 볼 때 "# FFFF0000"이고 Brushes.Red와 같지 않기 때문에 문제가되는 것은 아닙니다 (SolidColorBrush로 값을 변환하고 비교했습니다. Brushes.Red와 함께,하지만 그것은 동일하지 않습니다).

내가 잘못하고있는 것은 무엇입니까? 파일에서 읽은 색상 이름이 Brushes. *로 제대로 변환되도록하려면 어떻게해야합니까? 그렇게하면 DataTrigger가 올바르게 작동합니다.

감사합니다,

RDV

답변

1

예, Brushes.RedSolidColorBrush이다. 색깔, 붓이 아닙니다. XAML에서 문자열 "Red"를 Brush 개체로 암시 적으로 변환하면 혼란이 발생합니다. 그러나이 #FFFF0000과 같은 새 SolidColorBrush 인스턴스는 SolidColorBrush의 다른 인스턴스가되며 서로 "동일"하지 않습니다.

하지만 브러시 인스턴스가 마음에 들지 않습니다. 당신은 색깔에 관심이 있어요. 그래서 색상을 비교하십시오. (Brushes.Red.Color == Colors.Red) == true. Color은 참조 유형이 아닌 값 유형이므로 두 개의 해당 은 동일한 것으로 간주됩니다. BackgroundDataContext의 속성 아니라고

<DataTrigger 
    Binding="{Binding Background.Color, RelativeSource={RelativeSource Self}}" 
    Value="Red"> 

알 수 있습니다. 두 번째로 코드 작업을하지 않았습니다. BindingDataContext이 아니라 컨트롤 자체에서 Path에 언급 된 속성을 찾으라고 명시 적으로 말해야합니다. RelativeSource={RelativeSource Self} 않습니다. "Background.Color"Binding에 대한 Path 매개 변수입니다. Path이 기본값이므로 명시 적으로 이름을 지정하지 않아도됩니다. 그러나 당신은 할 수 있었다 :

<DataTrigger 
    Binding="{Binding Path=Background.Color, RelativeSource={RelativeSource Self}}" 
    Value="Red"> 
+0

감사합니다 Ed Plunkett, Background.Color는 속임수였다! – RDV