WinRT - XAML绑定DataContext

时间:2014-02-11 10:19:57

标签: c# xaml windows-store-apps datacontext

我尝试将ObservableCollection<UserProfile> UsersList绑定到网页DataContext,但程序一直告诉我,他找不到UsersList,尽管我可以使用Debug.WriteLine在OutPut中看到它的值。 但另一方面,如果我在C#代码中添加DataContext,一切都很完美。 我做错了什么?

C#代码:

this.DataContext = new UsersViewModel(); //inside MainPage constructor

XAML代码:

DataContext="{Binding UsersViewModel, RelativeSource={RelativeSource Self}}" //inside <page .../>

3 个答案:

答案 0 :(得分:4)

尝试以这种方式设置绑定:

DataContext="{Binding RelativeSource={RelativeSource Self}}"

您当前的绑定意味着将数据上下文绑定到其自身声明的名为UsersViewModel的属性。例如,如果您在后面的代码中有类似的内容,那将会有效:

public UsersViewModel UsersViewModel { get; set; }

然后将DataContext设置为该属性。

更新:

查看您的答案,您可以尝试以这种方式在页面级别设置DataContext:

<Page.DataContext>
    <local:UsersViewModel />
</Page.DataContext>

答案 1 :(得分:1)

好的,我现在已经开始工作,但在这种情况下,我不会在页面本身绑定任何内容,而是在网格上绑定。

<Page.Resources>
    <local:UsersViewModel x:Key="UsersViewModel" />
</Page.Resources>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" DataContext="{StaticResource UsersViewModel}">

这是一个好的解决方案吗?

答案 2 :(得分:0)

UserViewModel应该是MainPage.xaml.cs代码中的可访问对象。你可以有像

这样的东西
public UsersViewModel UsersViewModel { get {return _usersViewModel; } private set { _usersViewModel = value;} }

您必须使用对象名称而不是类名。