简单的WPF数据绑定

时间:2011-12-16 10:31:22

标签: wpf data-binding

我想将我的用户界面与我的代码分开,所以我(显然)登陆了绑定。作为测试,我写了以下XAML:

<Window x:Class="BindingTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="Auto" Width="200">
    <StackPanel>
        <TextBox Text="{Binding Item}"/>
        <Button Content="Add" Click="AddNew"/>
        <ListBox Height="100" ItemsSource="{Binding Items}"/>
    </StackPanel>
</Window>

C#看起来像这样:

namespace BindingTest
{
    public partial class MainWindow : Window
    {
        public string Item { get; set; }
        public ObservableCollection<string> Items { get; set; }

        public MainWindow()
        {
            InitializeComponent();
            Items = new ObservableCollection<string>();
        }

        private void AddNew(object sender, RoutedEventArgs e)
        {
            Items.Add(Item);
        }
    }
}

我想要发生的是输入文本框的文本被添加到列表框的itemssource中。但是,这不会发生......

5 个答案:

答案 0 :(得分:2)

你需要做两件事 -

  1. 在构造函数中设置 - DataContext = this;
  2. 如果您要将属性更改为依赖项属性,那么您会感觉更好。你可以使用visual studio中的“propdp”片段轻松完成。

答案 1 :(得分:1)

针对当前数据上下文执行数据绑定。但是,您尚未为窗口设置数据上下文。通常,您会将数据上下文设置为视图模型,但在您的情况下,您只需要使用窗口类。

您应该将以下行添加到构造函数中:

DataContext = this;

答案 2 :(得分:0)

将您的代码更改为:

    public partial class MainWindow : Window
    {
        public string Item { get; set; } 
        public ObservableCollection<string> Items { get; set; } 
        public MainWindow()
        {
            InitializeComponent(); 
            Items = new ObservableCollection<string>();
            DataContext = this;
        }

        private void AddNew(object sender, RoutedEventArgs e)
        {
            Items.Add(Item);
        }
    }
}

您需要设置DataContext - 适合我。

答案 3 :(得分:0)

两件事:

  1. 您应该为窗口设置正确的数据上下文。否则绑定将找不到您的属性。
  2. 您应该在InitializeComponent()调用之前初始化您的Items集合,其中ListBox会尝试评估表达式并获取NULL作为绑定源。由于您没有实现INotifyPropertyChanged并且该属性不是DependencyProperty,因此ListBox永远不会重新评估绑定,因此它永远不会获得Items集合的实例。
  3. 所以,代码应该如下:

        public MainWindow()
        {
            Items = new ObservableCollection<string>();
            DataContext = this;
            InitializeComponent(); 
        }
    

答案 4 :(得分:0)

试试这个

  希望这会奏效。但这不是正确的方法。您需要将DataContext设置为其属性u guna用于绑定的Object。你必须遵循MVVM架构。