2012-10-25 43 views
2

據我所知WinRT中不支持DataTriggers。但是,如何解決這個問題?WinRT中的DataTriggers

我有一個模型,實現了「Selected」屬性,擴展了INotifyPropertyChanged。如果選擇爲真,我想將按鈕的邊框更改爲紅色。我只是不知道如何將財產變化與觸發狀態變化聯繫起來。

型號

class MyObject : INotifyPropertyChanged 
{ 
    public MyObject() 
    { 
     Selected = true; 
    } 

    private bool _selected; 

    public bool Selected 
    { 
     get { return _selected; } 
     set { _selected = value; OnPropertyChanged("Selected"); } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

XAML

<Grid> 
    <Button Margin="131,97,171,124" Content="Hello!" DataContext="MyObject" d:DataContext="{d:DesignInstance local:MyObject}"> 
     <Button.Template> 
      <ControlTemplate TargetType="Button"> 
       <Border BorderThickness="1"> 
        <Border.BorderBrush> 
         <SolidColorBrush Color="Aqua"/> 
        </Border.BorderBrush> 
        <StackPanel> 
         <TextBlock Text="{TemplateBinding Content}"/> 
         <TextBlock Text="{Binding Selected}"/> 
        </StackPanel> 
       </Border> 
      </ControlTemplate> 
     </Button.Template> 
    </Button> 
</Grid> 
+0

您發佈的代碼,但並不表明,什麼不妥的地方。 –

+1

我在問我如何在MyObject的Selected屬性更改時觸發VisualState更改。因爲,DataTriggers不支持,我不知道如何做到這一點。 – States

回答

1

您可以使用一個簡單的轉換器(IValueConverter)。然後border屬性的Selected屬性綁定在你的視圖模型:

<Border BorderBrush="{Binding Selected, Converter={StaticResource MyConverter}}"> 

你當然需要把資源的地方在你的頁面資源,或App資源字典:

<mynamespace:MyConverter x:Key="MyConverter"/> 

然後在該轉換器,檢查值True並返回一個紅色畫筆

(我只是很快寫這篇文章,沒有測試它,但你可以谷歌如何輕鬆地做到這一點的東西,以及)