我的Datagrid存在问题。如果我在我的源类中修改了一个属性,它就不会更新。
这是在xaml中完成对源(List)的绑定:
<DataGrid Name="dtgDecodedMsg"
ItemsSource="{Binding Path=MsgTypGridLineListVar, UpdateSourceTrigger=PropertyChanged}"
这是一个如何构建类的图片: Classes
简短说明: 我按一个按钮,这个按钮用我想要显示的信息填充MsgTypGridLineListVar。然后我调用OnPropertyChanged来更新Datagrid。这很有效!
private void button_click(object parameter) {
this.MsgTypGridLineListVar = new List<CmsgTypGridLine>(); //Reset MsgTypGridLineListVar
... //Fill MsgTypGridLineListVar with information
OnPropertyChanged("MsgTypGridLineListVar");
}
现在,我需要在填充DataGrid时更改某些单元格的可见性/文本。所以它应该只改变某些字段/行而不是新创建的。
所以我想的只是改变我想要的值,然后调用OnPropertyChanged("MsgTypGridLineListVar");
试。
但这不起作用..如果我向下滚动该行不再可见,然后再向上滚动,它适用于单元格中的文本。但它对于可见性不起作用。
这是我创建的测试按钮:
private void testButton_click(object parameter)
{
this.MsgTypGridLineListVar[0].ByteCell.CellValue = "TEST";
this.MsgTypGridLineListVar[2].RowVisible = Visibility.Collapsed;
OnPropertyChanged("MsgTypGridLineListVar");
}
如上所述,它适用于文本(如果我向下滚动)但不适用于可见性。 我必须立即更改更新。
这是我的Datagrid的xaml-Code,你可以看到我如何进行绑定:
<DataGrid Name="dtgDecodedMsg"
CanUserSortColumns="False"
CanUserAddRows="False"
CanUserReorderColumns="False"
HeadersVisibility="Column"
IsTabStop="False"
ClipboardCopyMode="IncludeHeader"
SelectedIndex="{Binding DecodeSelectedGridIdx, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
ItemsSource="{Binding Path=MsgTypGridLineListVar, UpdateSourceTrigger=PropertyChanged}"
AutoGenerateColumns="False"
Margin="10,111,10,0">
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="..." Width="25">
<DataGridCheckBoxColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="BorderBrush" Value="LightBlue"/>
<Setter Property="BorderThickness" Value="2"/>
</Trigger>
</Style.Triggers>
<Setter Property="Background" Value="{Binding HideCell.CellColor}"/>
<Setter Property="BorderBrush" Value="{Binding HideCell.CellColor}"/>
<Setter Property="Focusable" Value="{Binding HideCell.CheckBoxEnabled}"/>
</Style>
</DataGridCheckBoxColumn.CellStyle>
<DataGridCheckBoxColumn.ElementStyle>
<Style TargetType="CheckBox">
<Setter Property="Visibility" Value="{Binding HideCell.CheckBoxVisibility}"/>
<Setter Property="IsChecked" Value="{Binding CheckBoxChecked,UpdateSourceTrigger=PropertyChanged}" />
</Style>
</DataGridCheckBoxColumn.ElementStyle>
</DataGridCheckBoxColumn>
<DataGridTextColumn Header="Value" Binding="{Binding ValueTelegramCell.CellValue}" IsReadOnly="True" Width="*">
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="BorderBrush" Value="LightBlue"/>
<Setter Property="BorderThickness" Value="2"/>
</Trigger>
</Style.Triggers>
<Setter Property="Foreground" Value="{Binding ValueTelegramCell.TextColor}"/>
<Setter Property="Background" Value="{Binding ValueTelegramCell.CellColor}"/>
<Setter Property="BorderBrush" Value="{Binding ValueTelegramCell.CellColor}"/>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
</DataGrid.Columns>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Visibility" Value="{Binding MsgTypGridLineListVar.RowVisible, UpdateSourceTrigger=PropertyChanged}"/>
</Style>
</DataGrid.RowStyle>
</DataGrid>
答案 0 :(得分:1)
直接绑定到RowVisible
的{{1}}属性:
CmsgTypGridLine
...并确保<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Visibility" Value="{Binding RowVisible}"/>
</Style>
</DataGrid.RowStyle>
类实现CmsgTypGridLine
接口并在INotifyPropertyChanged
属性的setter中引发更改通知。