简单的DataBinding

时间:2012-07-10 12:07:08

标签: c# wpf data-binding

我想进入DataBinding,目前我被卡住了。我无法让它发挥作用。我读了很多教程,但老实说,没有一个真正帮助过我。我知道DataBinding是什么以及使用它的原因很酷,但我从来没有遇到过教程,告诉我该怎么做在我的代码中。他们都只是假设我知道我必须在那里做什么,只展示XAML方面。

这是我的班级:

public class Test : Window
{
    public IList<String> data { get; set; }

    public Test() {
        data = new List<String>();
        InitializeComponents();
        data.Add("Hello");
        data.Add("World");
    }
}

这是我的XAML

<ListBox HorizontalAlignment="Left" Margin="6,6,0,6"
    Name="SourceDocumentsList" Width="202"
    ItemsSource="{Binding Source={x:Static Application.Current}, Path=data}" />

然而,渲染窗口时没有显示任何内容。怎么会这么容易失败?我在这里做错了什么?

我理解它的方式,我告诉Listbox它应该将自己绑定到当前正在运行的应用程序的data属性,这是我的类Test

2 个答案:

答案 0 :(得分:2)

当前运行的应用程序该类,它只是一个窗口,您绑定的是App类的实例。您不能以这种方式静态获取该窗口实例。如何进行绑定取决于XAML的位置(如果它在Test窗口中,您可以使用RelativeSource={RelativeSource AncestorType=Window}代替)。

我建议您阅读MSDN documentation on data binding和此article on debugging

答案 1 :(得分:1)

将这些属性移动到单独的类中,如

public class ViewModel
{
    public IList<String> Data { get; set; }

    public ViewModel()
    {
        Data = new ObservableCollection<string>();
        Data.Add("Hello");
        Data.Add("World");
    }
}

将窗口代码更改为

public MainWindow()
    {
        InitializeComponent();
        DataContext = new ViewModel();
    }

你的Xaml看起来不那么复杂了

<ListBox HorizontalAlignment="Left" Margin="6,6,0,6"
Name="SourceDocumentsList" Width="202"
ItemsSource="{Binding Data}" />

这就是我们所说的转向MVVM模式。快乐的编码!