【问题标题】:Setting DataContext to xaml.cs file将 DataContext 设置为 xaml.cs 文件
【发布时间】:2013-09-23 08:55:41
【问题描述】:

我有一个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”上找不到“PresenterContent”属性 (HashCode=63183526)。 BindingExpression: Path='PresenterContent' DataItem='MyNamespace.MyModel' (HashCode=63183526);目标元素是'System.Windows.Controls.ContentPresenter'(名称='');目标属性是“内容”(类型“System.Object”)..

【问题讨论】:

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


    【解决方案1】:

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

    DataContext="{Binding ElementName=phoneApplicationPage}
    

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

    yourElement.DataContext = this;
    

    编辑:

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

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

    【讨论】:

    • 我已经用新代码编辑了这个问题。我还是想避免使用代码隐藏
    • @StepTNT 我会说 DataContext 在您的代码中设置正确。问题可能出在 Content 属性中。 PresenterContent 在哪里定义?
    • 该属性在xaml.cs 文件中,没有错字或类似的东西。我正在添加异常,因为解析器似乎正在尝试在模型中查找属性,而不是使用 xaml.cs 上下文
    • 我不知道这会解决你的问题,但是你为什么不这样设置Grid的背景而不设置DataContext呢? Background="{Binding BackgroundColor, Mode=OneWay, Source={StaticResource MyModel}}"
    • 绑定没有按预期工作,但至少这解决了异常,这意味着我没有 DataContext 问题。谢谢你的提示!
    【解决方案2】:

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

    DataContext="{Binding ElementName=TheWindow}"
    

    【讨论】:

      猜你喜欢
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      相关资源
      最近更新 更多