Заполнение ListBoxItem Фон в соответствии с объектом члена Bool - PullRequest
2 голосов
/ 05 августа 2010

У меня есть класс с логическим членом, и я хочу заполнить список Wpf ListBox коллекцией моего класса.

Я хочу, чтобы фон списка был другого цвета, если мое логическое свойство имеет значение false Возможно ли это с XAML? Каков наилучший способ сделать это?

        class Mi
        {
            public bool mybool{get;set;}
        }
...
List<Mi> mycollection;// the datacontext

Ответы [ 3 ]

4 голосов
/ 05 августа 2010

Вы можете использовать DataTrigger:

<DataTemplate DataType="{x:Type my:Mi}">
    <Grid>
        <Grid.Style>
            <Style TargetType="Grid">
                <Setter PropertyName="Background" Value="White" />

                <Style.Triggers>
                    <DataTrigger Binding="{Binding mybool}" Value="True">
                        <Setter PropertyName="Background" Value="Yellow" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        <Grid.Style>
        ... your ListBoxItem contents here ...
    </Grid>
</DataTemplate>
3 голосов
/ 05 августа 2010

Вот быстрый общий конвертер для логических значений, который позволяет вам указать значение для true и что-то другое для false для свойств любого типа.

[ValueConversion(typeof(bool), typeof(object))]
public class BooleanValueConverter : IValueConverter
{
    public object FalseValue { get; set; }
    public object TrueValue { get; set; }

    #region IValueConverter Members

    public object Convert(object value, Type targetType, 
                          object parameter, CultureInfo culture)
    {
        return (bool)value ? this.TrueValue : this.FalseValue;
    }

    public object ConvertBack(object value, Type targetType, 
                              object parameter, CultureInfo culture)
    {
        return object.Equals(this.TrueValue, value) ? true : false;
    }

    #endregion
}

Используйте его так.


<SolidColorBrush x:Key="TrueBrush" Color="Green" />
<SolidColorBrush x:Key="FalseBrush" Color="Red" />

<local:BooleanValueConverter x:Key="BooleanBackground" 
    TrueValue="{StaticResource TrueBrush}" 
    FalseValue="{StaticResource FalseBrush}" />

...

Background="{Binding Path=Some.PropertyPath.Ending.With.A.Boolean, 
                             Converter={StaticResource BooleanBackground}}" />
1 голос
/ 05 августа 2010

Этого можно добиться с помощью DataTemplateSelector, имеющего два шаблона с различным фоном.

Возможно, лучшим способом было бы привязать свойство background к вашему логическому значению и использовать IValueConverter, который бы возвращал соответствующий цвет.

Background="{Binding Path=mybool, Converter={StaticResource boolToBackgroundConverter}}"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...