0

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

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

所以我需要将孩子的文件设置DataContextxaml.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”上找不到“PresenterContent”属性(HashCode=63183526)。BindingExpression: Path='PresenterContent' DataItem='MyNamespace.MyModel' (HashCode=63183526); 目标元素是'System.Windows.Controls.ContentPresenter'(名称='');目标属性是“内容”(类型“System.Object”)..

4

2 回答 2

1

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

DataContext="{Binding ElementName=phoneApplicationPage}

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

yourElement.DataContext = this;

编辑:

或者,您可以Content通过Binding在此处设置源来设置:

Content="{Binding PresenterContent, ElementName=MyName}"
于 2013-09-18T14:37:42.010 回答
0

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

DataContext="{Binding ElementName=TheWindow}"
于 2013-09-18T14:39:36.363 回答