与自我结合

时间:2015-04-23 16:33:26

标签: c# wpf xaml

在XAML中,如何将DataContext绑定到整个Page's类,以便我可以访问自己的属性?

如果我有以下XAML,则含义:

<Page
    x:Class="EasyWalk.UI.DetailPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:EasyWalk.UI"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" DataContext="{Binding RelativeSource={RelativeSource Self}}"> <!--This doesnt work-->
    </Grid>
</Page>

如何将该网格绑定到XAML使用的DetailPage(绑定到自己的类)?我希望能够在XAML中访问该类(本身)的成员。

意思是,我希望能够访问TestString的{​​{1}}成员:

DetailPage

我的XAML中的某个地方是这样的:

 public sealed partial class DetailPage: Page
    {
        private string testString;

        public String TestString
        {
            get { return this.testString; }
        }

        public EWRODetailPage()
        {
            this.InitializeComponent();
        }

    }

我该如何做到这一点?

2 个答案:

答案 0 :(得分:2)

只使用其中没有任何内容的绑定:

DataContext="{Binding }"

或者,您可以使用句点来表示Bindings中的“self”:

DataContext="{Binding .}"

MSDN页面在Binding.Path文档中记录了这两个文档。

答案 1 :(得分:1)

在代码后面设置DataContext

public sealed partial class DetailPage: Page
{
    private string testString;

    public String TestString
    {
        get { return this.testString; }
    }

    public EWRODetailPage()
    {
        this.InitializeComponent();
        DataContext = this;
    }    
}

然后删除此行:DataContext="{Binding RelativeSource={RelativeSource Self}}"

请注意:DetailPage类没有实现INotifyPropertyChanged,因此如果更改TestString值,UI将不会更新