DataContext和Bindings的新手问题

本文关键字:新手 问题 Bindings DataContext | 更新日期: 2023-09-27 18:18:57

我肯定不是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;
}

现在,这里有一个问题:

当我试图绑定例如一个TextBlockText属性到我的模型的一些简单的字符串值(例如Text={Binding Monthly}),它的工作。

现在,请注意,我也有一个网格,有四列。

我想把所有的项目在我的Items属性(ResultsModel),并显示他们在网格键。

显示列表项的"A"键,在列"A"中(假设是网格的第一列),等等

我怎么能做到这一点(在XAML和/或c#代码)?


更新:


(根据建议,我尝试了以下方法,但仍然不起作用)

Inside Grid XAML:

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

但是我得到以下错误:

System.Windows。数据错误:BindingExpression路径错误:num在'System.Collections.Generic.Dictionary 2[System.String,System.String]' 'System.Collections.Generic.Dictionary 2[System.String,System.String]'(HashCode = 57616766)。BindingExpression:路径="num"DataItem = ' System.Collections.Generic.Dictionary ' 2 system . string] [System.String,(HashCode = 57616766);目标元素是"System.Windows.Controls。TextBlock"(Name = ");目标属性为'Text' (type 'System.String')..

另外,请不要将Items转换为字符串-字符串键值对的列表。

任何想法?

DataContext和Bindings的新手问题

<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>

你刚才在绑定中尝试了吗:

{Binding Monthly, Mode = TwoWay}

在列定义和textBox中。

当你写你的专栏,你必须有这样的东西:

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

如果我没记错的话,你可以在列上做绑定。

必须在textBlock和Column之间链接value。

这可以解决你的问题。