简单ObservableCollection绑定?可以';Don’别把我的脑子搞糊涂了
本文关键字:我的 绑定 ObservableCollection 可以 Don 简单 | 更新日期: 2023-09-27 18:03:11
我想将列表框绑定到一个简单的可观察性收集
XAML-将Listbox绑定到我的Observablecollection对象
<Window x:Class="ObservableCollection.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:ObservableCollection"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ListBox Name="Listbox1" ItemsSource="{Binding Path= Test, UpdateSourceTrigger=PropertyChanged}"></ListBox>
</Grid>
添加一些项目并尝试在列表框中显示数据
namespace ObservableCollection
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ObservableCollection<int> Test = new ObservableCollection<int>();
Listbox1.DataContext = Test;
Test.Add(1);
Test.Add(123232);
}
}
}
运行代码时数据不会显示。我在这里做错了什么
感谢
绑定表达式将包括一个属性路径,在这种情况下,该路径必须引用DataContext
对象上存在的公共属性,或者它将省略该路径,在那种情况下,绑定将自己绑定到DataContext
对象。
在你的例子中,你似乎混淆了两者。您将绑定配置为要省略属性路径,但随后在XAML中提供了属性路径。
您可以执行以下操作之一…
向MainWindow
类添加一个属性,并保留XAML中的路径:
public partial class MainWindow : Window
{
public ObservableCollection<int> Test { get; set; }
public MainWindow()
{
Test = new ObservableCollection<int>();
InitializeComponent();
DataContext = this;
Test.Add(1);
Test.Add(123232);
}
}
或者,您可以更改XAML以直接使用DataContext
对象:
<Window x:Class="ObservableCollection.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:ObservableCollection"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ListBox Name="Listbox1" ItemsSource="{Binding}"/>
</Grid>
</Window>
请注意,您也不需要设置UpdateSourceTrigger
属性。目标值永远不会改变,所以没有理由担心在这种事件中如何更新源。
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
ObservableCollection<int> test = new ObservableCollection<int>();
test.Add(1);
test.Add(123232);
Test = test;
}
public ObservableCollection<int> Test { get; set; }
希望这能澄清问题。您的数据上下文是IBindable消费者关注的地方。