WPF:绑定到MainWindow属性

时间:2014-11-24 18:27:39

标签: c# wpf xaml data-binding visibility

我遇到了绑定到父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设置为&#34; Collapsed&#34;但是CompanyInfoUserControl显示了其可见性绑定的问题:

  

System.Windows.Data错误:40:BindingExpression路径错误:   &#39; MainContentVisibility&#39;在&#39; object&#39;上找不到的属性&#39;&#39;主窗口&#39;   (名称=&#39;&#39;)&#39 ;. BindingExpression:路径= MainContentVisibility;   的DataItem =&#39;主窗口&#39; (名称=&#39;&#39);目标元素是   &#39; CompanyInfoUserControl&#39; (名称=&#39;&#39);目标财产是“可见性”&#39;   (键入&#39;可见性&#39;)

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

修改

我尝试了保罗的建议,现在我将其作为Snoops的绑定错误:

  

System.Windows.Data错误:40:BindingExpression路径错误:   &#39; MainContentVisibility&#39;在&#39; object&#39;上找不到的属性   &#39;&#39; MainPageViewModel&#39; (的HashCode = 63642613)&#39 ;.   BindingExpression:路径= MainContentVisibility;   的DataItem =&#39; MainPageViewModel&#39; (的HashCode = 63642613);目标元素是   &#39; CompanyInfoUserControl&#39; (名称=&#39;&#39);目标财产是“可见性”&#39;   (键入&#39;可见性&#39;)

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

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

2 个答案:

答案 0 :(得分:3)

我认为MainContentVisibility不在ViewModel上?

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

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

答案 1 :(得分:2)

您已将DataContext的{​​{1}}设置为Window。子元素将继承此MainPageViewModel,因此不需要您的相对路径。您所需要的只是:

DataContext

您当前的代码正在<v:CompanyInfoUserControl Width="800" Visibility="{Binding Path=MainContentVisibility}" /> 控件本身上寻找名为MainContentVisibility的属性,而不是视图模型。