我想进入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
。
答案 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模式。快乐的编码!