2015-06-07 55 views
2

我正在嘗試設置我的應用程序的通信模塊樣式。我從DataTemplate中綁定的extenal API獲取一些數據。我想根據Status屬性的值更改ListView ItemTemplate樣式。基於屬性值的樣式

如果狀態是「新」,那麼網格的邊框應該是2px橙色,如果狀態是「讀取」,那麼網格的邊框應該是1px灰色。

我已經實現了這個使用轉換器,但我敢打賭有更好的辦法。

XAML文件

<ListView ItemsSource="{Binding ConversationsList}"> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Setter Property="Padding" Value="0,0,0,0"/> 
      <Setter Property="Margin" Value="0,0,0,0"/> 
     </Style> 
    </ListView.ItemContainerStyle> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <Grid BorderBrush="{Binding status, Converter={StaticResource StatusToBorder}, ConverterParameter=BorderBrush}" 
        BorderThickness="{Binding status, Converter={StaticResource StatusToBorder}, ConverterParameter=BorderThickness}" 
        Background="White" 
        Margin="5,5,5,5"> 

轉換文件

class StatusToBorder : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     var param = parameter as String; 
     var _value = value as String; 
     switch (param) { 
      case "BorderBrush": 
       if (_value == "new") 
        return "#FFFF5917"; 
       else 
        return "#FFAAAAAA"; 
      case "BorderThickness": 
       if (_value == "new") 
        return new Thickness(2, 2, 2, 2); 
       else 
        return new Thickness(1, 1, 1, 1); ; 
      default: 
       return null; 
       break; 
     } 
    } 



    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     throw new NotImplementedException(); 
    } 
} 

回答

0

你需要給電網的名稱在XAML。 在XAML:

<Grid x:Name=MyGrid 
    IsRead="{Binding Read}"...> 

那麼你的代碼中,其中爲已讀或不網格標明:
在Java:

MyGrid.BorderBrush = new SolidColorBrush(Windows.UI.Colors.Orange); 
MyGrid.BorderThickness = new Thickness(3); 

MyGrid.BorderBrush = new SolidColorBrush(Windows.UI.Colors.Gray); 
MyGrid.BorderThickness = new Thickness(1); 

我假設你知道如何設置DataContext的,並資源等。如果不是這樣,這個嘖嘖涵蓋數據綁定更徹底:
https://msdn.microsoft.com/en-us/library/windows/apps/jj207023(v=vs.105).aspx