ComboBox ItemsSource绑定不会使用Observable Collection Add进行更新

时间:2015-10-07 20:39:24

标签: c# wpf xaml

我有一个简单的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");
    }
}
}

甚至问这个问题感觉有点蠢,但即使在谷歌看也没有帮助我。你也可以吗?

1 个答案:

答案 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作为公共属性,并使用正确的视图模型而不是绑定到代码隐藏。