2017-07-15 2 views
0

"UCKit"(さまざまなパラメータを含む)列仕様を含むUserControl)がコントロールにバインドされています。 GridControlのItemsSourceを構成するクラスのプロパティであるObservableCollectionのCountプロパティにバインドされ、PropertyChanged通知に応答しません。また、grid.RefreshData( )。 xamlで単純なGridColumn宣言を使用するテストプログラムを作成し、Count列は正常に動作しますが、更新するコードにGridColumnsが組み込まれているグリッドを取得できません。DevExpress Grid:xaml宣言されたgridcolumnではプロパティのプロパティの通知が有効ですが、プログラムで追加されたgridcolumnでは使用できません

ここでは、正常に更新XAMLです:

<dxg:GridControl Grid.Column="0" HorizontalAlignment="Stretch" Name="griddywiddy2" AutoGenerateColumns="None" 
        Grid.Row="2" Grid.ColumnSpan="4" VerticalAlignment="Stretch" ItemsSource="{Binding MyDataColl, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"> 
     <dxg:GridControl.View> 
      <dxg:TableView AllowPerPixelScrolling="True" ShowTotalSummary="True"/> 
     </dxg:GridControl.View> 
     <dxg:GridControl.Columns> 
      <dxg:GridColumn Header="Row Name" Width="Auto" FieldName="RowName"/> 
      <dxg:GridColumn Header="Count" Width="Auto" FieldName="Stringz.Count"/> 
     </dxg:GridControl.Columns> 
    </dxg:GridControl> 

せず、XAML + C#コード(行名の更新、カウントはしません):

<dxg:GridControl Grid.Column="0" HorizontalAlignment="Stretch" Name="griddywiddy" AutoGenerateColumns="None" 
        Grid.Row="1" Grid.ColumnSpan="4" VerticalAlignment="Stretch" ItemsSource="{Binding MyDataColl, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"> 
     <dxg:GridControl.View> 
      <dxg:TableView AllowPerPixelScrolling="True" ShowTotalSummary="True"/> 
     </dxg:GridControl.View> 
    </dxg:GridControl> 

    private void InitializeColumns() 
    { 
     griddywiddy.Columns.Add(
      new DevExpress.Xpf.Grid.GridColumn() 
      { 
       Header = "Row Name", 
       Binding = new Binding("RowName") 
       { 
        Mode = BindingMode.TwoWay, 
        Converter = null 
       }, 
       Width = 100 
      }); 
     griddywiddy.Columns.Add(
      new DevExpress.Xpf.Grid.GridColumn() 
      { 
       Header = "Count", 
       Binding = new Binding("Stringz.Count") 
       { 
        Mode = BindingMode.OneWay, 
        Converter = null 
       }, 
       Width = 100 
      }); 
    } 

更新の私の2つの方法が両方ともxamlで宣言された列とコードビルドされた行名列の両方で動作します(テストプログラムのボタンクリックハンドラで呼び出されます)。

private void UpdBtn_Click(object sender, RoutedEventArgs e) 
    { 
     griddywiddy.RefreshData(); 
     griddywiddy2.RefreshData(); 
    } 

    private void UpdBtn2_Click(object sender, RoutedEventArgs e) 
    { 
     MyData incer = MyDataColl[0]; 
     incer.NotifyPropertyChanged("Stringz.Count"); 
     incer.NotifyPropertyChanged("RowName"); 
    } 

私は本当にこのCountプロパティがxamlのケースでは正しく動作するが、コードで構築されたケースでは正しく動作しないことに戸惑う。誰でも助言してくれますか?

答えて

0

GridColumnの作成時にBinding = "Binding"( "Stringz.Count")を使用すると、GridColumnのFieldName = "Stringz.Count "(私はxamlで何をするのですか?)したがって、これらの"入れ子になった "通知(複雑なパスを呼び出す)では、GridColumnを指定するFieldNameメソッドを使用します。

このソリューションはDevExpressの人々の礼儀で、btw、彼らに大きな感謝!

関連する問題