为什么我不能在Bindings中直接使用ObservableCollection

本文关键字:ObservableCollection 不能 Bindings 为什么 | 更新日期: 2023-09-27 18:21:14

我想知道为什么我不能从MainWindow.xaml.直接使用ObservableCollection

代码:

public partial class MainWindow : Window
{
    public ObservableCollection<DummyData> tmpLst = new ObservableCollection<DummyData>();
    public ObservableCollection<DummyData> Dummy
    {
        get { return tmpLst; }
    }
    private void CreateDummy()
    {
        for (int x = 1; x < 10; x++)
        {
            tmpLst.Add(new DummyData() { text = ("DummyData =" + x), wert = x });
        }
    }
    public MainWindow()
    {            
        InitializeComponent();
        CreateDummy();
    }
}

Xaml:

<Window x:Class="WpfApplication2.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApplication2"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <DataGrid Name="testGrid" AutoGenerateColumns="True" 
              DataContext="{Binding RelativeSource={RelativeSource AncestorType=Window}}"
              ItemsSource="{Binding tmpLst}"
        HorizontalAlignment="Stretch"
        VerticalAlignment="Stretch">
    </DataGrid>
</Grid>

Xaml-作品:

<DataGrid Name="testGrid"
          AutoGenerateColumns="True" 
          DataContext="{Binding RelativeSource={RelativeSource AncestorType=Window}}"
          ItemsSource="{Binding Dummy}"/>

如果我使用了Dummy而不是tmpLst,那么网格会向我显示数据,也许我错过或忘记了什么?

为什么我不能在Bindings中直接使用ObservableCollection

要使绑定正常工作,必须使用Property,而不是公共字段。

WPF中有一个概念叫做依赖属性。

房地产在WPF中占有极其重要的地位。

很少有好的链接:

数据绑定常见问题

Scott的DataBinding教程

你什么都没错过。

绑定引擎要求绑定目标为属性。绑定到字段永远不会起作用。