0

我想进入 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

4

2 回答 2

2

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

我建议阅读有关数据绑定的 MSDN 文档有关调试的这篇文章

于 2012-07-10T12:12:24.930 回答
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 模式。快乐编码!

于 2012-07-10T12:22:47.407 回答