我有一个简单的wpf应用程序,我想尝试使用来自xaml的ItemsSource绑定。当我点击按钮。它也应该在UI中更新,但它没有。
为什么它不起作用?
Xaml代码:
<Window x:Class="SendRawEthernetPacketsGUI.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<ComboBox HorizontalAlignment="Left" Margin="76,65,0,0" VerticalAlignment="Top" Width="120" ItemsSource="{Binding test}"/>
<Button Content="Button" HorizontalAlignment="Left" Margin="90,171,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
</Grid>
C#代码:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace SendRawEthernetPacketsGUI
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public ObservableCollection<string> test = new ObservableCollection<string>();
public Window1()
{
InitializeComponent();
DataContext = this;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
test.Add("fdfddf");
}
}
}
甚至问这个问题感觉有点蠢,但即使在谷歌看也没有帮助我。你也可以吗?
答案 0 :(得分:1)
你的绑定从来没有起作用。您只能绑定到属性而非字段。
请改为尝试:
public ObservableCollection<string> test { get; set; }
public Window1()
{
Test = new ObservableCollection<string>();
}
或者如果你想要一些棘手的C#6魔术:
public ObservableCollection<string> test => new ObservableCollection<string>();
这是函数bodied-member 并编译为初始化为新ObservableCollection
警告/设计错误:
请注意,在这两种情况下,您都没有使用INotifyPropertyChanged
,因此UI不会选择对集合进行批量分配。您还应该使用PascalCase作为公共属性,并使用正确的视图模型而不是绑定到代码隐藏。