0

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

正常に更新される 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 の場合では正しく機能するのに、コードで構築された場合では機能しない理由について、私は本当に困惑しています。誰でもアドバイスできますか?

4

1 に答える 1