0

私は間違いなく C# と .NET を初めて使用するわけではありませんが、かなり長い間 XAML を使用していないため、非常に単純な問題に直面しています...

ResultsModel次のようなテスト モデル ()を作成しました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

namespace Test_Project_
{
    public class ResultsModel : INotifyPropertyChanged
    {
        private string _Monthly;
        public string Monthly
        {
            get { return _Monthly; }
            set { _Monthly = value; NotifyPropertyChanged("Monthly"); }
        }

        private string _TotalAmount;
        public string TotalAmount
        {
            get { return _TotalAmount; }
            set { _TotalAmount = value; NotifyPropertyChanged("TotalAmount"); }
        }

        private string _TotalInterest;
        public string TotalInterest
        {
            get { return _TotalInterest; }
            set { _TotalInterest = value; NotifyPropertyChanged("TotalInterest"); }
        }

        List<Dictionary<string, double>> _Items;
        public List<Dictionary<string, double>> Items
        {
            get { return _Items; }
            set { _Items = value; NotifyPropertyChanged("Items"); }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        public void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this,
                    new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}

私のMainPageクラスでは:

public ResultsModel Results;
public MainPage()
{
    InitializeComponent();
    Results = new ResultsModel();
    DataContext = Results;
}

さて、ここにキャッチがあります:

たとえば、 aのプロパティをモデルの単純な文字列値の一部 (たとえば) にバインドしようとすると、機能します。TextBlockTextText={Binding Monthly}

ここで、4 つの列を持つグリッドもあることに注意してください。

Itemsプロパティ ( ResultsModel) 内のすべてのアイテムを取得し、それらをキー別にグリッドに表示したいと考えています。

例えば

リスト項目の「A」キーを列「A」(グリッドの最初の列としましょう) などに表示します。

どうすればそれを行うことができますか (XAML および/または C# コードで)?


アップデート :


(提案に基づいて、次のことを試しましたが、まだ機能していません)

GridXAMLの内部:

<ItemsControl ItemsSource="{Binding Items, Mode=TwoWay}">
     <ItemsControl.ItemTemplate>
          <DataTemplate>
               <TextBlock Grid.Column="0" Text="{Binding Path=num}" />
          </DataTemplate>
     </ItemsControl.ItemTemplate>
</ItemsControl>

しかし、次のエラーが発生します。

System.Windows.Data エラー: BindingExpression パス エラー: 'num' プロパティが 'System.Collections.Generic.Dictionary 2[System.String,System.String]' 'System.Collections.Generic.Dictionary2[System.String,System.String]' に見つかりません (HashCode=57616766)。BindingExpression: Path='num' DataItem='System.Collections.Generic.Dictionary`2[System.String,System.String]' (HashCode=57616766); ターゲット要素は 'System.Windows.Controls.TextBlock' (Name='') です。ターゲット プロパティは 'Text' (タイプ 'System.String') です。

また、Items文字列と文字列のキーと値のペアのリストに変換されていないことを確認してください。

何か案は?

4

2 に答える 2

3
<ItemsControl ItemsSource="{Binding Items}">
  <ItemsControl.ItemTemplate>
    <!-- datatemplate to render your items -->
  </ItemsControl.ItemTemplate>
  <ItemsControl.ItemsPanelTemplate>
    <!-- wrappanel or what ever to control orientation and stuff -->
  </ItemsControl.ItemsPanelTemplate>
于 2013-06-19T09:26:48.370 に答える
0

バインディングでこれを試しましたか:

{Binding Monthly, Mode = TwoWay}

列定義と textBox の両方で。

列を作成するときは、次のようなものが必要です。

<datagrid.column>
<datagridtextColumn header
binding />
</datagrid.column>

よく覚えていれば、カラムにバインディングを作成できます。

これは、textBlock と Column の間の値をリンクする必要があります。

これで問題を解決できます。

これは私にとってはうまくいきます。

于 2013-06-19T09:27:48.243 に答える