Ofi*_*fir 6 wpf datacontext mvvm
我不确定我的问题标题是否代表我的问题,我会尽力解释:
我有一个网格单元DataTemplate :(该网格属于第三方公司,但对我的问题并不重要)
<DataTemplate>
<TextBlock>
<Hyperlink Command="{Binding OpenLinkCommand}">
<Hyperlink.ToolTip>
<TextBlock Text="{Binding Data.MapLink}"/>
</Hyperlink.ToolTip>
<TextBlock Text="{Binding Data.MapLink}" TextDecorations="underline">
</Hyperlink>
</TextBlock>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
我想让这个DataTemplate显示一些超链接("Data.MapLink"是包含链接值的对象),每次单击此链接将触发命令"OpenLinkCommand".
问题是"Data.MapLink"和"OpenLinkCommand"位于不同的dataContext中,然后我必须选择以下选项之一:
保留超链接dataContext作为它 - 命令不会工作,超链接将获得Data.MapLink值.
将超链接dataContext更改为命令datacontext - 该命令将起作用,但超链接名称将为空.
遗憾的是我没有选择将这些项放在同一个dataContext中,所以我必须找到一种方法告诉命令它dataContext是"X"并告诉hyperLink它dataContext是"Y".
我希望我的问题很清楚如何解决这个问题?
Rac*_*hel 17
您可以使用一些绑定属性Source为绑定指定不同于默认值的绑定属性DataContext
最常见的是ElementName或者RelativeSource,它会在VisualTree中找到另一个UI元素,因此您可以绑定它的属性.
例如,以下用于ElementName告诉绑定它应该MyGridView用作绑定源,并绑定到MyGridView.DataContext.OpenLinkCommand
<Hyperlink Command="{Binding ElementName=MyGridView,
Path=DataContext.OpenLinkCommand}">
Run Code Online (Sandbox Code Playgroud)
您还可以RelativeSource在绑定中使用以在指定对象类型的VisualTree中找到对象,并将其用作绑定源.此示例与上面的示例执行相同的操作,除了它使用RelativeSource而不是ElementName,因此您GridView不需要Name指定.
<Hyperlink Command="{Binding
RelativeSource={RelativeSource AncestorType={x:Type GridView}},
Path=DataContext.OpenLinkCommand}">
Run Code Online (Sandbox Code Playgroud)
第三个选项是将绑定的Source属性设置为静态对象,如下所示:
<Hyperlink Command="{Binding
Source={x:Static local:MyStaticClass.OpenLinkCommand}}">
Run Code Online (Sandbox Code Playgroud)
根据你在这里关于绑定到单身人士的评论,这可能是你的最佳选择.
| 归档时间: |
|
| 查看次数: |
16478 次 |
| 最近记录: |