c# - 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; }
}
我究竟做错了什么?
解决方案
好的,正如其他人已经提到的,您需要将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>
推荐阅读
- android - 突然“会话'应用程序':启动活动出错”?
- windows - 在 Windows 上使用自动热键模拟 jumpapp
- bash - 如何组合两个字符串并将其用作变量?
- swift - UICollectionView Cell 在选择时不会改变
- angular - Firebase 上托管的 Ionic 4 应用程序仅在重新加载时返回 404
- go - 如何在 Go 中嵌套结构
- c - 如何解决 C 代码的 MISRA C:2012 规则 13.2 和 13.3?
- ruby-on-rails - 为使用令牌而不是 ID 查找的方法设置路线?
- javascript - 如何防止我的平滑滚动 jquery 函数修改我的 div 元素的内容?
- azure - 如何使用 StackExchange.Redis 为 Azure Redis 缓存的所有键全局设置键过期值?