从控件中获取要绑定到的UserControl DataContext属性

时间:2011-04-24 14:37:36

标签: wpf datacontext

以下是UserControl的代码:

<UserControl x:Class="UZ.ActivitySink.GUI.Views.POSsView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"                                             
    xmlns:Views="clr-namespace:UZ.ActivitySink.GUI.Views">
    <DockPanel>
        <TreeView ItemsSource="{Binding Types}" x:Name="POSTree" Background="{x:Null}" HorizontalAlignment="Left" FontSize="14" 
                  Visibility="{Binding DataContext.TreeVisibility, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Views:POSsView}}, Mode=TwoWay}">
        </TreeView>

        <StackPanel x:Name="ErrorPanel" 
                    Visibility="{Binding DataContext.ErrorMessageVisibility, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Views:POSsView}}, Mode=TwoWay}" Margin="20">
        </StackPanel>
    </DockPanel>
</UserControl>

我正在将datacontext对象分配给它的构造函数

中的控件
DataContext = _viewModel;

_viewModel具有名为TreeVisibility的属性和Visibility类型的ErrorMessageVisibility,但屏幕上的Visual元素仍然不会将其可见性值绑定到这些属性。

在我的情况下,从xaml声明引用控件的viewmodel属性的正确方法是什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

你的绑定比必要的更复杂。

这一个:

Visibility="{Binding DataContext.TreeVisibility,
                     RelativeSource={RelativeSource FindAncestor,
                     AncestorType={x:Type Views:POSsView}}, Mode=TwoWay}"

在这种情况下应该等同于更简单的

Visibility="{Binding TreeVisibility}"

那就是说,即使当前的绑定很复杂,它们仍应该有效(至少给出你已经提供的信息)。

如果仍然无法让它们工作,请在调试器中运行您的应用程序并查看“输出”窗口 - 默认情况下会报告绑定错误,并且它们包含的信息将帮助您到达问题

相关问题