我想进入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}" />然而,当我呈现窗口时,什么都不会显示。这么容易的事情怎么会失败呢?我在这里做错什么了?
按照我的理解,我告诉列表框,它应该绑定到当前运行的应用程序的data属性,这是我的类Test。
发布于 2012-07-10 12:22:47
将这些属性移动到一个单独的类中,如
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-10 12:12:24
当前运行的应用程序是而不是该类,它只是一个窗口,您绑定到的是App类的实例。您不能以这种方式静态地获取该窗口实例。如何进行绑定取决于XAML的位置(如果它位于Test窗口中,则可以使用RelativeSource={RelativeSource AncestorType=Window} )。
我建议阅读关于数据绑定的MSDN文档和这个关于调试的文章。
https://stackoverflow.com/questions/11412966
复制相似问题