以下是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属性的正确方法是什么?
谢谢。
答案 0 :(得分:0)
你的绑定比必要的更复杂。
这一个:
Visibility="{Binding DataContext.TreeVisibility,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Views:POSsView}}, Mode=TwoWay}"
在这种情况下应该等同于更简单的
Visibility="{Binding TreeVisibility}"
那就是说,即使当前的绑定很复杂,它们仍应该有效(至少给出你已经提供的信息)。
如果仍然无法让它们工作,请在调试器中运行您的应用程序并查看“输出”窗口 - 默认情况下会报告绑定错误,并且它们包含的信息将帮助您到达问题