来自ToolTip或ContextMenu的RelativeSource绑定

我在这里做错了什么?:


 <GridViewColumn>

    <GridViewColumn.CellTemplate>

       <DataTemplate>

          <Button>

            <Button.ToolTip>

              <TextBlock Text="{Binding Path=Title, RelativeSource={RelativeSource AncestorType=Window}}" />

那只是一个简化的示例,无论如何都不起作用:)实际上,我需要从Window的DataContext范围内的另一个属性中获取一个值。


请帮助我。


慕标5832272
浏览 686回答 3
3回答

慕的地6264312

如下所示:PlacementTarget是拥有ContextMenu的控件(例如:DataGrid)。不需要“标签”属性。IsEnabled绑定到DataGrid的“ myProperty”值。我对此进行了测试,并且可以正常工作。绑定存在类似问题。<ContextMenuDataContext="{Binding Path=PlacementTarget, RelativeSource={RelativeSource Self}}"IsEnabled="{Binding myProperty}"&nbsp;&nbsp;>

慕无忌1623718

因为ContextMenu不在可视树中,所以绑定将不起作用。一个简单的解决方案是使用代理模式,你可以创建一个继承的包装类DependencyObject,并具有DependencyProperty将保持DataContext你的Window,那么你可以在XAML代理的资源,最后你的绑定MenuItem通过代理命令添加到您所需的命令宾语。样本代理:Public class ProxyClass : DependencyObject{&nbsp; &nbsp; Public object Data {get; set;}&nbsp; &nbsp;public static readonly DependencyProperty DataProperty = DependencyProperty.Register("DataProperty", typeof(object), typeof(ProxyClass), new FrameworkPropertyMetadata(null));}如何在XAML中使用:<Window DataContext="{Binding MyViewModel}">...<Window.Resources>&nbsp; &nbsp; <ProxyClass Data={Binding} x:Key="BindingProxy"/></Window.Resources>...&nbsp;&nbsp;<MenuItem Command="{Binding Source={StaticResource BindingProxy}, Path=Data.MyDesiredCommand"/>...</Window>怎么了?Data财产ProxyClass将绑定到DataContext的Window,那么它所有的comamnds和你的属性ViewModel的内部ProxyClass资源。这种方法的另一个好处是可移植性,并且可以在多个视图和项目中重复使用。
打开App,查看更多内容
随时随地看视频慕课网APP