【问题标题】:Binding properties through DataTemplates and ContentControl通过 DataTemplates 和 ContentControl 绑定属性
【发布时间】:2012-01-24 13:35:11
【问题描述】:

我喜欢this answer,它几乎适合我。

但是,如果我的 DataTemplate 位于外部 ResourceDictionary 中,我该如何实现呢?

我正在使用 Prism,并通过使用如下文件为每个模块提供 DataTemplates(用于通用 CRUD 视图):

<ResourceDictionary ... some hidden ns here ... >
    <DataTemplate DataType="{x:Type model:Operation}">
        <vw:OperationView />
    </DataTemplate>
    <DataTemplate DataType="{x:Type model:Customer}">
        <vw:CustomerView />
    </DataTemplate>
</ResourceDictionary>

然后我使用 this answerResourceDictionaries 合并到 Shell 应用程序中,我有一个默认的 CRUD 视图,其中包含该代码:

<ContentControl Content="{Binding MyGenericObject}" />

ContentControl 自动拉取正确的视图。它工作正常,但我想知道在每个视图中绑定对象的属性。

这是这些视图的示例 (OperationView.xaml):

<UserControl x:Class="TryERP2.Cadastro.View.OperationView"
             ... some hidden NS ... >
    <StackPanel>
        <Label Content="Id" />
        <TextBox Text="{Binding ????WHAT????}" />
        <Label Content="Description" />
        <TextBox Text="{Binding ????WHAT????}" />
    </StackPanel>
</UserControl>

如何绑定这些属性?

【问题讨论】:

  • “常规”绑定不起作用吗?你试过什么?
  • 我对 WPF 还很陌生,只是不知道如何使用这种方法进行绑定。你能理解整个例子吗?清楚吗?

标签: wpf data-binding resourcedictionary contentcontrol


【解决方案1】:

由于OperationView 后面的DataContext 将是Operation 类型的对象,因此您只需绑定到您想要的Operation 上的任何属性

<!-- DataContext will be model:Operation per your DataTemplate -->
<UserControl x:Class="TryERP2.Cadastro.View.OperationView"
             ... some hidden NS ... >
    <StackPanel>
        <Label Content="Id" />
        <TextBox Text="{Binding Id}" />
        <Label Content="Description" />
        <TextBox Text="{Binding Description}" />
    </StackPanel>
</UserControl>

【讨论】:

  • 天哪。有效。我想我让事情变得更难了。我尝试了很多方法,但我没有尝试过最简单的方法。谢谢=D
  • @DiegoStiehl 哈哈,这就是为什么我在你的另一个问题中对你的 cmets 如此困惑的原因 :) 很高兴你能正常工作
  • 那是因为我是所有 WPF 功能的新手。他们以不同的方式工作,我认为所有初学者都会遇到一些困难。
  • @DiegoStiehl 是的,它有一个学习曲线,但是一旦你习惯了它,它就会非常好用且易于使用:)
  • 我想你很快就会看到我提出的一个新问题。我仍然有很多问题,但我认为我正在取得一些进展。
【解决方案2】:

UserControl 中的DataContext 是您的模型对象,因此您可以像这样直接绑定到它的属性:

Text="{Binding SomeProperty}"

(如果只指定了一个路径,则绑定是相对于 DataContext 的,请注意,在您链接的答案中,意图是在 DataContext 本身上有一个 TwoWay 绑定,这是一个原语字符串,这不能使用像{Binding .} 这样的简单绑定来完成,需要指定针对实际属性的属性路径)

【讨论】:

  • 不,我的克星又回来了!我想我昨天没见过你:)
  • @Rachel:你好,克星,从我的代表图表中可以看出,我不是很活跃,随着考试季节对我来说现在开始,它可能会下降得更多。跨度>
  • 哦,太好了,也许我可以回答一些问题 :) 实际上,我一直在努力限制我在工作时间花在这里的时间......它很容易拉出未回答的正在构建某些东西或正在发生其他一些漫长的过程时的页面!祝你考试好运,而不是你需要它。
  • @Rachel:如果考试是在 WPF 上,我肯定不需要它,但遗憾的是事实并非如此,所以谢谢:P
  • stackoverflow:一个会见老朋友的地方。哈哈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 2014-07-07
相关资源
最近更新 更多