WPF:绑定到MainWindow属性 [英] WPF: Binding to MainWindow Property

查看:73
本文介绍了WPF:绑定到MainWindow属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在绑定父MainWindow属性MainContentVisibility时遇到问题.我有以下代码:

I am having an issue with binding to a parent MainWindow property, MainContentVisibility. I have the following code:

MainWindow.xaml

<Window x:Class="CallTracker.WPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:v="clr-namespace:MyProgram.WPF.Views"
        DataContext="{Binding MainPageViewModel, Source={StaticResource Locator}}">

        <StackPanel>
            <v:CompanyInfoUserControl Width="800" Visibility="{Binding MainContentVisibility, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" />
            <v:MainContentUserControl Width="800" Visibility="{Binding Path=MainContentVisibility, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" />
        </StackPanel>   
</Window>

当前,我的两个用户控件不过是带有文本块的堆栈面板,直到我弄清楚了此可见性问题.

Currently my two user controls are nothing more than a stack panel with a text block until I figure out this Visibility issue.

我可以使用Snoop来检查MainPageViewModel,可以看到属性MainContentVisibilty设置为"Collapsed",但是CompanyInfoUserControl的可见性绑定存在问题:

I can use Snoop to check my MainPageViewModel and I can see that the property MainContentVisibilty is set to "Collapsed" but the CompanyInfoUserControl shows an issue with its Visibility binding:

System.Windows.Data错误:40:BindingExpression路径错误:在对象""MainWindow"上找不到"MainContentVisibility"属性(名称='')''.BindingExpression:Path = MainContentVisibility;DataItem ='MainWindow'(Name ='');目标元素是'CompanyInfoUserControl'(Name ='');目标属性是可见性"(输入可见性")

System.Windows.Data Error: 40 : BindingExpression path error: 'MainContentVisibility' property not found on 'object' ''MainWindow' (Name='')'. BindingExpression:Path=MainContentVisibility; DataItem='MainWindow' (Name=''); target element is 'CompanyInfoUserControl' (Name=''); target property is 'Visibility' (type 'Visibility')

有人可以在这里解释我在做什么错吗?

Can someone explain what I am doing wrong here?

编辑

我尝试了保罗的建议,现在我从Snoops得到这个作为绑定错误:

I tried paul's suggestion and now I get this as the binding error from Snoops:

System.Windows.Data错误:40:BindingExpression路径错误:在对象"上找不到"MainContentVisibility"属性''MainPageViewModel'(HashCode = 63642613)'.BindingExpression:Path = MainContentVisibility;DataItem ='MainPageViewModel'(HashCode = 63642613);目标元素是'CompanyInfoUserControl'(Name ='');目标属性是可见性"(输入可见性")

System.Windows.Data Error: 40 : BindingExpression path error: 'MainContentVisibility' property not found on 'object' ''MainPageViewModel' (HashCode=63642613)'. BindingExpression:Path=MainContentVisibility; DataItem='MainPageViewModel' (HashCode=63642613); target element is 'CompanyInfoUserControl' (Name=''); target property is 'Visibility' (type 'Visibility')

解决方案

我实际上并没有绑定到我的数据模型,而是绑定了XAML对象(在本例中为MainWindow.xaml).为了绑定到数据,我必须添加引用'DataContext',如下所示:

I wasn't actually binding to my data model but rather the XAML object (in this case MainWindow.xaml) In order to bind to the data I had to add the reference 'DataContext' as follows:

<v:CompanyInfoUserControl Visibility="{Binding DataContext.MainContentVisibility, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" />

推荐答案

我认为 MainContentVisibility 不在ViewModel上吗?

I take it that MainContentVisibility is not on the ViewModel?

如果要在视图模型之外的主窗口属性上访问它,请为窗口提供一个名称,例如 x:Name ="MyMainWindow" 并在绑定中访问它

If you want to access it on the main window's property away from the viewmodel, then provide a name for the window such as x:Name="MyMainWindow" and the access it in the binding

Visibility="{Binding MainContentVisibility, ElementName=MyMainWindow}"

这篇关于WPF:绑定到MainWindow属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆