繁体   English   中英

WPF:绑定到MainWindow属性

[英]WPF: Binding to MainWindow Property

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

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>

目前,在我弄清楚此可见性问题之前,我的两个用户控件不过是带有文本块的堆栈面板。

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

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

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

编辑

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

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

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

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

我认为MainContentVisibility不在ViewModel上吗?

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

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

您已经将WindowDataContext设置为MainPageViewModel 子元素将继承此DataContext因此不需要您的相对路径。 所有你需要的是:

<v:CompanyInfoUserControl Width="800" Visibility="{Binding Path=MainContentVisibility}" />

您当前的代码正在Window控件本身而不是视图模型上寻找一个名为MainContentVisibility的属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM