我想将我的用户界面与我的代码分开,所以我(显然)登陆了绑定。作为测试,我写了以下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中。但是,这不会发生......
答案 0 :(得分:2)
你需要做两件事 -
DataContext = this;
。答案 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)
两件事:
InitializeComponent()
调用之前初始化您的Items集合,其中ListBox会尝试评估表达式并获取NULL作为绑定源。由于您没有实现INotifyPropertyChanged并且该属性不是DependencyProperty,因此ListBox永远不会重新评估绑定,因此它永远不会获得Items集合的实例。所以,代码应该如下:
public MainWindow()
{
Items = new ObservableCollection<string>();
DataContext = this;
InitializeComponent();
}
答案 4 :(得分:0)
试试这个
希望这会奏效。但这不是正确的方法。您需要将DataContext设置为其属性u guna用于绑定的Object。你必须遵循MVVM架构。