0

実行時に Silverlight 列に列を追加し、列のバインディングも実行する必要があります。

これは、xamlで静的に行う方法です

<sdk:DataGridTextColumn  CanUserReorder="True" CanUserResize="True" CanUserSort="True"  Header="CriteriaName" Width="2*" Binding="{Binding Path=[CriteriaName]}" IsReadOnly="True"  />

今、私はコードビハインドで同じことをしたい、

これが私がやったことです

 foreach(string Col in lColumnNames)
            {
                DataGridTextColumn DGCol=new DataGridTextColumn();
                DGCol.Header= Col;


                Binding lObjBinding = new Binding(Col);
                lObjBinding.Mode = BindingMode.OneWay;

                DGCol.Binding = lObjBinding;
                GrdQuickFindResult.Columns.Add(DGCol);


            }

これは機能していません。バインドが行われていないかのように、DataGrid に空白の行しか表示されません。Plsは、xamlを使用して行ったすべてのことがC#を使用して行われたかどうか、または作成したバインディングオブジェクトに設定するために残っているプロパティがあるかどうかを確認して教えてください。ありがとう

4

2 に答える 2

1

次のようなバインディング:

"{Binding Path=MyProperty}" 

は、冗長な書き方です。

"{Binding MyProperty}"

それと同じように

Binding b = new Binding();

と同じです

Binding b = new Binding("MyProperty");

そして、TextBoxColumn のテキストを、DataGrid の行の DataContext として設定されるデータ オブジェクトのプロパティ「MyProperty」の値にバインドしていることを意味します。このため、データ オブジェクトが次のようなものであると想定しています。

public class DataObject{
    public object MyProperty {get; set;}
}

データ オブジェクトがそのようなものである場合、コード ビハインドでのバインディングは適切であり、機能するはずです。

次のようなバインディングを指定すると:

"{Binding Path=[MyProperty]}" 

または

"{Binding [MyProperty]}"

データ オブジェクトのインデクサーをバインドし(実装している場合)、インデックス "MyProperty" に対応する値にアクセスします。これを行う場合、データ オブジェクトは次のような IDictionary またはインデクサーを実装するクラスであると想定します。

public class DataObject{
    public object this[object index]
    {
        get{ /*return something*/ }
        set { /*set something*/ }
    }
}

単なる提案:ローカル変数にはキャメル ケースを使用してください。他の人がコードを見ていると奇妙に見えます。インスタンス プロパティまたは静的フィールドのように見えます。

于 2012-12-13T12:22:09.113 に答える
0
 foreach(string Col in lColumnNames)
            {
                DataGridTextColumn DGCol=new DataGridTextColumn();
                DGCol.Header= Col;

                Binding lObjBinding = new Binding();
                lObjBinding.Mode = BindingMode.OneWay;

                //=====This is what was missing======================//
                lObjBinding.Path = new PropertyPath("["+Col+"]");
                //==================================================//

                DGCol.Binding = lObjBinding;
                GrdQuickFindResult.Columns.Add(DGCol);


            }
于 2012-12-13T07:31:56.857 に答える