2017-01-06 5 views
0

Мой XAML код:VB.net XAML изменение цвета DataGrid ячейки на основе значения

<Window x:Class="MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:Datagrid_Binding" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="8517" Width="1244"> 
    <Grid> 
     <DataGrid x:Name="WaterfallDataGrid" CanUserSortColumns="False" ColumnWidth="60" AutoGenerateColumns="False"> 



      <DataGrid.Columns> 
       <DataGridTextColumn Header="Load" Binding="{Binding Load}"></DataGridTextColumn> 
       <DataGridTextColumn Header="PF" Binding="{Binding PF}"></DataGridTextColumn> 
       <DataGridTextColumn Header="Spare" Binding="{Binding Spare}"></DataGridTextColumn> 
      </DataGrid.Columns> 

      <DataGridTextColumn Binding="{Binding Load}"> 
       <DataGridTextColumn.ElementStyle> 
        <Style TargetType="{x:Type TextBlock}"> 
         <Style.Triggers> 
          <Trigger Property="Text" Value="Full Load"> 
           <Setter Property="Background" Value="LightGreen"/> 
          </Trigger> 
         </Style.Triggers> 
        </Style> 
       </DataGridTextColumn.ElementStyle> 
      </DataGridTextColumn> 


     </DataGrid> 
    </Grid> 
</Window> 

Мой VB.net код.

Class MainWindow 
    Public Sub New() 

     ' This call is required by the designer. 
     InitializeComponent() 

     ' Add any initialization after the InitializeComponent() call. 
     Dim dt3 As New DataTable("Waterfall") 

     dt3.Columns.Add("Load") 
     dt3.Columns.Add("PF") 
     dt3.Columns.Add("Spare") 
     'dt3.rows.add(New Object() {"full load", "0.8", "20%"}) 
     dt3.Rows.Add("full load", "0.8", "20%") 
     WaterfallDataGrid.ItemsSource = dt3.DefaultView 

    End Sub 
End Class 

Что бы я хотел сделать, когда ячейка имеет текст «полная загрузка», он меняет цвет своей ячейки. Я получаю сообщение об ошибке во время выполнения, в котором говорится: «Элемент коллекции должен быть пуст перед использованием ItemsSource». Очень озадачен этим. Некоторая помощь была оценена.

ответ

1

Проблема в том, что вы дважды определили один и тот же столбец.

<Window x:Class="MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
     <Grid> 
      <DataGrid x:Name="WaterfallDataGrid" CanUserSortColumns="False" ColumnWidth="60" AutoGenerateColumns="False"> 
       <DataGrid.Columns> 
        <DataGridTextColumn Header="Load" Binding="{Binding Load}"> 
         <DataGridTextColumn.ElementStyle> 
          <Style TargetType="{x:Type TextBlock}"> 
            <Style.Triggers> 
            <Trigger Property="Text" Value="full load"> 
             <Setter Property="Background" Value="LightGreen"/> 
            </Trigger> 
           </Style.Triggers> 
          </Style> 
         </DataGridTextColumn.ElementStyle> 
        </DataGridTextColumn> 
        <DataGridTextColumn Header="PF" Binding="{Binding PF}"></DataGridTextColumn> 
        <DataGridTextColumn Header="Spare" Binding="{Binding Spare}"></DataGridTextColumn> 
       </DataGrid.Columns> 
      </DataGrid> 
     </Grid> 
    </Window> 
+0

Не знаю, как это будет решить мою проблему, как то, что я ищу для ячейки, чтобы изменить цвет, если ячейка содержит формулировку «полная нагрузка» ... – Tofulover

+0

Это, чтобы избежать исключения. – MyB

+0

Забудьте о загруженном событии. проблема заключается в том, как вы определили столбцы. Стиль должен быть определен в определении столбца или в разделе ресурсов. – MyB

Смежные вопросы