2011-06-28 44 views
1

我想在我的WPF應用程序中實現一個可視指示(燈泡),只要在我的視圖模型(MVVM)中有一個屬性(string RFID,引發PropertyChanged事件)變化。我的窗口的DataContext被設置爲viewmodel。我有兩個圖像顯示燈泡開/關。在視圖模型中選擇屬性更改圖像

我試着用觸發器和樣式,但它沒有工作:

<Image> 
     <Image.Style> 
      <Style TargetType="Image"> 
       <Setter Property="Source" Value="LightGrey.png"/> 
       <Style.Triggers> 
        <Trigger Property="RFID" Value="???"> 
         <Setter Property="Source" Value="LightGreen.png"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </Image.Style> 
    </Image> 

任何幫助表示讚賞!

回答

2

你可以有一個布爾IsLightOn財產在你的視圖模型,和你只要RFID火一個PropertyChanged事件,視圖模型變成IsLightOn = true並設置一個計時器,X秒後自動IsLightOn = false

+0

我有問題設置觸發屬性IsLightOn。我改變了我的示例代碼(見上面),如下所示:''。錯誤:在Controls.Image類型上找不到樣式屬性IsLightOn。 – nabulke

+0

@nabulke將你的'Trigger'改爲'DataTrigger'。 '' – Rachel

+0

現在它可以工作,非常感謝Rachel。 – nabulke

1

如果你不想額外的布爾屬性如建議。你可以寫一個簡單的值轉換器來實現這一點。

class AnyToBoolConverter: IValueConverter   
    { 
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
        { 
            return (value != null) ? true : false; 
        } 
          
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
        { 
            return DependencyProperty.UnsetValue; 
        } 
    } 

該轉換器將在許多情況下派上用場。你可以這樣做:

<DataTrigger Binding="{Binding Path=RFID, Converter={StaticResource boolConverter}}" Value="True"> 
      <Setter Property="Source" Value="LightGreen.png"/> 
</DataTrigger>