Почему моя привязка не работает на 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 ответ

Решение

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;
}
Другие вопросы по тегам