简单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);
    }
}
}

运行代码时数据不会显示。我在这里做错了什么
感谢

简单ObservableCollection绑定?可以';Don’别把我的脑子搞糊涂了

绑定表达式将包括一个属性路径,在这种情况下,该路径必须引用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消费者关注的地方。