首页 > 解决方案 > ObservableCollection 绑定没有按预期工作

问题描述

我在绑定 ObservableCollections 时遇到问题。其他属性(字符串)都可以。这是我的代码:

主窗口.xaml

<StackPanel>
    <TextBlock Text="{Binding Title}"/>
    <ItemsControl ItemsSource="{Binding Data}">
        <TextBlock Text="{Binding B}"/>
    </ItemsControl>
</StackPanel>

主窗口.xaml.cs

public MainWindow()
{
   InitializeComponent();
   DataContext = new MainWindowVm();
}

主窗口虚拟机

class MainWindowVm
{
    public ObservableCollection<A> Data;
    public string Title { get; set; } = "HELLO WORLD";
    public MainWindowVm()
    {
        Data = new ObservableCollection<A>() {new A() {B = "X"}, new A() {B = "X"}};
    }
}

class A
{
    public string B { get; set; }
}

结果 在此处输入图像描述

我究竟做错了什么?

标签: c#wpf

解决方案


好的,正如其他人已经提到的,您需要将Data字段更改为属性。

public ObservableCollection<A> Data { get; set; }

摆脱错误

在使用 ItemsSource 之前,项目集合必须为空。

将您的 XAML 更改为:

 <StackPanel>
    <TextBlock Text="{Binding Title}"/>
    <ItemsControl ItemsSource="{Binding Data}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding B}"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</StackPanel>

推荐阅读