为什么我的绑定不适用于ObservableCollection

时间:2012-04-13 18:35:52

标签: wpf binding observablecollection

您好我正在尝试将ItemsSource绑定到ObservableCollection。如果ObservableCollection是公共的,那么IntelliSense事件似乎不会看到ObservableCollection。

我是否在XAML中声明了某些内容以使其可见?就像在Window.Ressources中一样。

我的XAML代码

<Window x:Class="ItemsContainer.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">

    <StackPanel Orientation="Horizontal">
        <ListBox ItemsSource="{Binding StringList}" />
    </StackPanel> </Window>

我的C#代码

using System.Collections.ObjectModel;
using System.Windows;

namespace ItemsContainer
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        private ObservableCollection<string> stringList = new ObservableCollection<string>();

        public ObservableCollection<string> StringList
        {
            get
            {
                return this.stringList;
            }
            set
            {
                this.stringList = value;
            }
        }

        public MainWindow()
        {
            InitializeComponent();
            this.stringList.Add("One");
            this.stringList.Add("Two");
            this.stringList.Add("Three");
            this.stringList.Add("Four");
            this.stringList.Add("Five");
            this.stringList.Add("Six");
        }
    }
}

据我所知,绑定应该绑定到当前的StringList属性 DataContext,即MainWindow。

感谢任何指针。

编辑:

这在XAML中对我有用

<Window x:Class="ItemsContainer.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">

    <StackPanel Orientation="Horizontal">
        <ListBox ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=StringList}" />
    </StackPanel>
</Window>

1 个答案:

答案 0 :(得分:3)

DataContext不默认为MainWindow,您必须明确设置它。像这样:

public MainWindow() {
    InitializeComponent();
    this.stringList.Add("One");
    this.stringList.Add("Two");
    this.stringList.Add("Three");
    this.stringList.Add("Four");
    this.stringList.Add("Five");
    this.stringList.Add("Six");
    this.DataContext = this;
}