2013-08-30 2 views
3

MVVM 패턴을 사용하고 있으며 내 뷰의 datacontext에 Customer 속성이 있습니다. 이제 Customer.CustomerID 속성의 값에 따라 My textbox의 IsEnabled 속성을 바인딩하고 싶습니다. 0보다 크면 else를 사용 가능하게해야합니다.조건부 표현식을 사용하여 WPF 데이터 바인딩

필자는 뷰 모델에 bool 속성을 쉽게 추가하고이를 내 텍스트 상자의 IsEnabled 속성에 바인딩 할 수 있다고 생각하지만 과도한 것처럼 보입니다.

답변

9

몇 가지 옵션이 있습니다.

먼저 DataTrigger

<TextBox> 
    <TextBox.Style> 
     <Style TargetType="TextBox"> 
      <Setter Property="IsEnabled" Value="True"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Customer.CustomerID}" Value="0" > 
        <Setter Property="IsEnabled" Value="False"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBox.Style> 
<TextBox> 

가 알고 있어야 사용할 수 있습니다, DataTrigger의 세터에서 그 값은 스타일 세터로 설정 한 경우에만 값을 대체 할 수 있습니다하시기 바랍니다. 값을 직접 설정하면 트리거가 작동하지 않습니다.
이유는 Dependency Property Value Precedence입니다. 나는 여러 화면에서이를 사용하려고하고 같이이 일반적인하기 위해 Value Converter

+0

어떻게 든 가능 - 당신이 aswell 음수에 대해 확인해야하는 경우, 다음 두 번째 옵션을 사용할 수 있도록

DataTrigger 만 평등 조건에서 작동 , somepoint에서 customerID는 다른 사람에게 employeeID 일 수 있습니다. templateBinding과 같은 것. – MegaMind

+0

글쎄, 당신은 많은 다른 트리거와 스타일을 만들려고 할 수 있습니다. 그런 다음 bindig는 트리거 중 하나에서만 작동합니다. 또 다른 방법은 전체 엔터티 (고객 또는 직원)를 받아들이고 IsEnabled에 대한 값을 반환하는 코드에서 적절한 속성을 사용하는 ValueConverter를 만드는 것입니다. –

+0

감사합니다. Value Converter의 개념을 잘 이해하고 있지만 데이터 트리거를 사용해도 동일한 작업을 수행하려고합니다. 귀하의 의견에서 이해할 수있는 것은 다른 화면과 속성을 사용하여 다른 트리거를 만들어야한다는 것입니다. 나는 그것을 올바르게 이해하고 있는가? 우리는 이것을 일반적인 방법으로 사용하지 마십시오. – MegaMind