我正在尝试设置我的应用程序的通信模块。我从extenal API获取了一些数据,这些数据绑定在DataTemplate中。我想根据Status属性的值更改ListView ItemTemplate样式。
如果状态为“new”,则网格边框应为2px Orange,如果状态为“read”,则网格边框应为1px Gray。
我使用转换器实现了这一点,但我打赌有更好的方法。
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 :(得分:0)
您需要在网格中为网格命名。 在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和资源等。如果没有,这个tut更彻底地涵盖数据绑定:
https://msdn.microsoft.com/en-us/library/windows/apps/jj207023(v=vs.105).aspx