1

私はC#、WPFで次のコードを持っています:

base.DataContext = new DataTemplate[]
                {
                    new DataTemplate
                    {
                        lblText = "First",
                        txtBoxContent = ""
                    },

                    new DataTemplate
                    {
                        lblText = "Second",
                        txtBoxContent = "Something"
                    }
                };

しかし、データベースから動的に DataContext を埋める必要があります。私の考えは次のようになります。

base.DataContext = new DataTemplate[]
        {
            for(int i = 0; i< dsTmp.Tables[0].Rows.Count; i++)
            {
                new DataTemplate
                {
                    lblText = "Count: ",
                    txtBoxContent = dsTmp.Tables[0].Rows[i][0].ToString();
                }
            }
        };

これを入力すると、いくつかの構文エラーが表示されます。

正しい書き方を誰か教えてくれませんか?

4

4 に答える 4

3

オブジェクト初期化構文内にコードを含めることはできません。なぜ単純にこれをしないのですか:

   var list = new DataTemplate[dsTmp.Tables[0].Rows.Count];
   for(int i = 0; i< dsTmp.Tables[0].Rows.Count; i++)
    {
        var item = new DataTemplate
        {
            lblText = "Count: ",
            txtBoxContent = dsTmp.Tables[0].Rows[i][0].ToString();
        };
        list[i] = item;
    }

    this.DataContext = list;
于 2012-07-16T09:01:13.273 に答える
2

MBen と Habib は、オブジェクト初期化子でループを実行できず、ループの代替手段を提供しているため、 for が失敗する理由について既に回答しています。

または、linq を使用して初期化を実行することもできます。

this.DataContext=dsTmp.Tables[0].Rows.Select(
  x=>new DataTemplate { 
                        lblText = "Count: ",
                        txtBoxContent=x[0].ToString()
                      }).ToArray(); 
于 2012-07-16T09:12:58.517 に答える
1

;欠落しているエラーは、少し誤解を招く可能性があります。実際の問題は、ループを使用して DataTemplate の配列を作成しようとしていることです。配列/オブジェクトの初期化でループを使用することはできません。以下を試してください。

DataTemplate[] tempDataTemplate = new DataTemplate[ds.Temp.Tables[0].Rows.Count]();
for(int i = 0; i< dsTmp.Tables[0].Rows.Count; i++)
            {

             tempDataTemplate[i] =   new DataTemplate
                                             {
                                             lblText = "Count: ",
                                             txtBoxContent = dsTmp.Tables[0].Rows[i][0].ToString();
                                             };
            }

base.DataContext = tempDataTemplate;
于 2012-07-16T09:01:21.567 に答える
0

何を達成したいのかわかりませんが、ビューモデルの最初のアプローチで mvvm を試したことがありますか?

2 つのパブリック プロパティ MyText、MyContent を持つ MyData などのビューモデル クラスを作成します。これらのオブジェクトのコレクションを作成し、データベースからこれを埋めます。

少なくとも、アイテムソース バインディングがコレクションに設定されたアイテム コントロールと、MyData オブジェクトのデータ テンプレートが必要です。

<DataTemplate DataType="{x:Type local:MyData}">
  <view:MyDataViewControl />
</DataTemplate>

項目コントロールにすべての動的オブジェクトが表示されます。

于 2012-07-16T09:06:24.660 に答える