基于房产价值的风格

时间:2015-06-07 06:22:02

标签: c# wpf xaml windows-phone-8.1

我正在尝试设置我的应用程序的通信模块。我从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();
    }
}

1 个答案:

答案 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