2017-11-28 16 views
0

私のDatagridに問題があります。ソースクラスのプロパティをハンギングすると、更新されません。ItemSourceのアイテムのDatagrid PropertychangeがDatagridを更新しない

これは、ソース(一覧)への結合は、XAMLで行われている方法である:ここでは

<DataGrid Name="dtgDecodedMsg" 
       ItemsSource="{Binding Path=MsgTypGridLineListVar, UpdateSourceTrigger=PropertyChanged}" 

はクラスが組み込まれている方法の画像です: Classes

短い説明: 私はAを押しますボタンとこのボタンは、表示したい情報でMsgTypGridLineListVarを埋めます。次に、OnPropertyChangedを呼び出してDatagridを更新します。これは動作しています!

DataGridが既に埋め込まれている場合、一部のセルの表示/テキストを変更する必要があります。だから、特定のフィールドや行だけを変更し、新しいものを作成しないようにする必要があります。 私が思ったのは、私が望む値を変更してからOnPropertyChanged("MsgTypGridLineListVar"); にもう一度電話をかけたということでした。

しかし、これは動作しません..私はこの行がもう見えないようにスクロールし、再びスクロールすると、セルのテキストのために働きます。しかし、それは可視性のためには機能しません。ここで

は、私が作成したテスト・ボタンです:

private void testButton_click(object parameter) 
{ 

    this.MsgTypGridLineListVar[0].ByteCell.CellValue = "TEST"; 
    this.MsgTypGridLineListVar[2].RowVisible = Visibility.Collapsed; 
    OnPropertyChanged("MsgTypGridLineListVar"); 
} 

としてはなく、可視性のために(私はスクロールダウンしている場合)には、テキストのために働く言及しました。 アップデートがすぐに行われるように変更する必要があります。

はここであなたがバインド私がどのように見ることができ、私のXAMLコード-DataGridの:

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

答えて

1

バインドCmsgTypGridLine直接のRowVisibleプロパティに:

<DataGrid.RowStyle> 
    <Style TargetType="DataGridRow"> 
     <Setter Property="Visibility" Value="{Binding RowVisible}"/> 
    </Style> 
</DataGrid.RowStyle> 

... CmsgTypGridLineクラスがINotifyPropertyChangedインターフェイスを実装し、RowVisibleプロパティのセッターで変更通知を発行することを確認してください。

+0

ありがとうございました!私はサブクラスでINotifyPropertyChangedを実装するのを忘れました.. * facepalm * – kpischi

関連する問題