我有一个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>
我已尝试同时使用Name
和x: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')..
答案 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}"