将ObservableCollection绑定到WPF ListBox

Fla*_*ack 15 wpf binding wpf-controls

我有以下代码隐藏:

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        ObservableCollection<int> sampleData = new ObservableCollection<int>();
        public ObservableCollection<int> SampleData
        {
            get
            {
                if (sampleData.Count <= 0)
                {
                    sampleData.Add(1);
                    sampleData.Add(2);
                    sampleData.Add(3);
                    sampleData.Add(4);
                }
                return sampleData;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的xaml是:

<Window x:Class="Sandbox.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">
    <Grid>
        <ListBox ItemsSource="{Binding Path=SampleData}"/>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

该列表不显示集合中的值(或任何内容).有人能指出我的错误是什么吗?

我是否需要显式设置DataContext?我想如果没有设置控件将只使用自己作为DataContext.

Fre*_*lad 20

是的,您需要以某种方式设置DataContext.它没有DataContext,因为除非设置了Window,否则Window没有DataContext.如果在构造函数中执行此操作,ListBox将获取DataContext.

public MainWindow() 
{ 
    InitializeComponent(); 
    this.DataContext = this;
} 
Run Code Online (Sandbox Code Playgroud)

否则你可以在Binding中使用RelativeSource,ElementName等,但我想你知道=)