简单的ObservableCollection绑定?无法将我的大脑包裹起来

时间:2016-08-20 20:04:41

标签: c# wpf listbox

我想将一个列表框绑定到一个简单的observablecollection

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

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

2 个答案:

答案 0 :(得分:1)

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; }

希望这可以解决问题。您的datacontext是IBindable消费者的外观。

答案 1 :(得分:1)

绑定表达式将包含属性路径,在这种情况下,路径必须引用public class ModelStateTagHelper : TagHelper { public ViewDataDictionary ViewData { get; set; } public ModelStateDictionary ModelState { get; set; } public override void Process(TagHelperContext context, TagHelperOutput output) { } } 对象上存在的公共属性,否则它将省略路径,在这种情况下绑定将是自己DataContext对象。

在您的示例中,您似乎混淆了两者。您可以将绑定配置为省略属性路径,但随后在XAML中提供属性路径。

您可以执行以下操作之一...

将属性添加到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); } } 对象:

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> 属性。目标值永远不会改变,所以没有理由担心在这样的事件中如何更新源。