将DataContext设置为xaml.cs文件

时间:2013-09-18 14:26:54

标签: c# xaml binding windows-phone-8 datacontext

我有一个Grid和一个组件。 Grid有自定义DataContext,而孩子必须使用默认的.xaml.cs文件。

当然,更改父控件的DataContext也会为子控件更改它。

所以我需要将孩子的DataContext设置为xaml.cs文件。

我正在尝试使用DataContext="{Binding}",但它无效。

我该怎么做?

编辑: 这是基于回复的代码

<UserControl x:Class="MyNamespace.MyClass"
x:Name="MyName"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:lsp="clr-namespace:LSPlugins"
xmlns:utils="clr-namespace:LSPlugins.Utilities"
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
d:DesignHeight="480" d:DesignWidth="480"> 

    <UserControl.Resources>
        <utils:ColorToSolidColorBrushValueConverter x:Key="ColorConverter"/>
        <lsp:MyModel x:Key="MyModel" x:Name="MyModel"/>
    </UserControl.Resources>

    <Grid x:Name="LayoutRoot" DataContext="{StaticResource MyModel}" Background="{Binding Path=BackgroundColor, Converter={StaticResource ColorConverter}}" Opacity="{Binding Path=BackgroundOpacity}">        
        <ContentPresenter Content="{Binding PresenterContent}" DataContext="{Binding ElementName=MyName}"/>
    </Grid>
</UserControl>

我已尝试同时使用Namex:Name,但它仍无效,并且会抛出此异常:

  

System.Windows.Data错误:BindingExpression路径错误:'MyNamespace.MyModel''MyNamespace.MyModel'(HashCode = 63183526)上找不到'PresenterContent'属性。 BindingExpression:Path ='PresenterContent'DataItem ='MyNamespace.MyModel'(HashCode = 63183526); target元素是'System.Windows.Controls.ContentPresenter'(Name =''); target属性是'Content'(类型'System.Object')..

2 个答案:

答案 0 :(得分:1)

尝试将页面元素本身绑定到DataContext属性:

DataContext="{Binding ElementName=phoneApplicationPage}

或者,在代码隐藏(即xaml.cs文件)中:

yourElement.DataContext = this;

修改

或者,您可以通过在其中设置来源,将Content设置为Binding

Content="{Binding PresenterContent, ElementName=MyName}"

答案 1 :(得分:0)

您可以命名父控件,然后使用ElementName绑定子项的DataContext:

DataContext="{Binding ElementName=TheWindow}"