首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单DataBinding

简单DataBinding
EN

Stack Overflow用户
提问于 2012-07-10 12:07:08
回答 2查看 162关注 0票数 0

我想进入DataBinding,现在我被困住了。我就是没法让它起作用。我读了很多教程,但老实说,这些都帮不了我。我知道DataBinding是什么,也知道为什么使用它很酷,但是我从来没有遇到过一个教程,它告诉我如何在代码中做。他们都认为我知道我必须在那里做什么,并且只显示了XAML方面。

这是我的课:

代码语言:javascript
复制
public class Test : Window
{
    public IList<String> data { get; set; }

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

这是我的XAML

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

然而,当我呈现窗口时,什么都不会显示。这么容易的事情怎么会失败呢?我在这里做错什么了?

按照我的理解,我告诉列表框,它应该绑定到当前运行的应用程序的data属性,这是我的类Test

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-10 12:22:47

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

代码语言:javascript
复制
public class ViewModel
{
    public IList<String> Data { get; set; }

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

将窗口代码更改为

代码语言:javascript
复制
public MainWindow()
    {
        InitializeComponent();
        DataContext = new ViewModel();
    }

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

代码语言:javascript
复制
<ListBox HorizontalAlignment="Left" Margin="6,6,0,6"
Name="SourceDocumentsList" Width="202"
ItemsSource="{Binding Data}" />

这就是我们所称的MVVM模式。编码愉快!

票数 1
EN

Stack Overflow用户

发布于 2012-07-10 12:12:24

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

我建议阅读关于数据绑定的MSDN文档和这个关于调试的文章

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11412966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档