WPF:绑定到MainWindow属性 [英] WPF: Binding to MainWindow Property
问题描述
我在绑定父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屋!