Функция привязки к DataTrigger WPF - PullRequest
0 голосов
/ 30 ноября 2011

Редактировать: я изменил несколько вещей в своем бэкэнде и в своем xaml, но я не получаю ни один из моих стилей ..

        <DataGrid 
        AutoGenerateColumns="False" Height="Auto" 
        Grid.Row="2"  Grid.RowSpan="5" 
        HorizontalAlignment="Left"
        VerticalAlignment="Top" Width="Auto" 
        Tag="Text"
        ItemsSource="{Binding Nodes}"
        IsSynchronizedWithCurrentItem="True"
        x:Name="NodeDataGrid" Background="{Binding Color}">

        <DataGrid.Columns>
            <DataGridTextColumn Header="Node ID" Binding="{Binding NodeID}"></DataGridTextColumn>
            <DataGridTextColumn Header="Status" Binding="{Binding Status}"></DataGridTextColumn>
            <DataGridTextColumn Header="Temp" Binding="{Binding Temperature}">

                <DataGridTextColumn.ElementStyle>
                    <Style TargetType="{x:Type TextBlock}">
                        <!--<Setter Property="Background" Value="White"/>
                        <Setter Property="Foreground" Value="Black"/>-->
                        <Style.Triggers>
                            <!--<DataTrigger Binding="{Binding Path=NodeColor, RelativeSource={RelativeSource Self}, Converter={StaticResource Conversion.RangeToBoolean}}" Value="True">
                                <Setter Property="Background" Value="LightBlue"/>
                            </DataTrigger>-->
                            <DataTrigger Binding="{Binding NodeColor}" Value="1">
                                <Setter Property="TextBlock.Background" Value="Red" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>
            <DataGridTextColumn Header="Damp" Binding="{Binding Dampness}"></DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>

И в другом классе ..

public class RangeToBoolean : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return ((double)value) < 0.5;
    }
}

И в моем NodeColorViewModel

     private List<NodeColor> DetermineColor(List<NodeItem> nodes, List<NodeColor> nodeColor)
     {
        //SolidColorBrush myBrush = new SolidColorBrush(Colors.White);

        foreach (var item in nodes)
        {
            NodeColor aNode = new NodeColor();
            aNode.Color = 0;
            if (item.Temperature >= 80.0)
            {
                //aNode.Color = new SolidColorBrush(Colors.LightSalmon);
                aNode.Color = 1;
            }
            else if (item.Temperature < 20.0)
            {
                //aNode.Color = new SolidColorBrush(Colors.LightBlue);
                aNode.Color = 2;
            }
            nodeColor.Add(aNode);
        }

        return nodeColor;
    }
}

И в моем MainWindowViewModel

public MainWindowViewModel()
    {
        nodes = DetermineStatus(nodes);
        var colors = DetermineColor(nodes, nodeColor);

        var nodeColorViewModel = new List<NodeColorViewModel>();

        foreach (var item in colors)
        {
            //nodes.ForEach(c => nodeViewModel.Add(new NodeItemViewModel(c)));
            nodeColorViewModel.Add(new NodeColorViewModel(item));
        }
        NodeColor = nodeColorViewModel;
    }

Моя цель - отображать красный фон только для определенных (выше 80 для температуры), пожалуйста, дайтеЯ знаю, если вы можете думать о проблеме.В данный момент отображается только стиль по умолчанию, почти как мой триггер отключен.

1 Ответ

0 голосов
/ 30 ноября 2011

Ну, я не вижу ничего плохого в вашей привязке, но я считаю, что результат bool от вашего конвертера должен быть в нижнем регистре:

В вашем хранилище данных

Value = 'True'

изменить на строчные буквы 'true'

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