2014-11-24 261 views
1

我遇到了與父MainWindow屬性MainContentVisibility綁定的問題。我有以下代碼:WPF:綁定到MainWindow屬性

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設置爲「摺疊」,但CompanyInfoUserControl顯示了其知名度的問題結合:

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')

有人能解釋我是什麼在這裏做錯了嗎?

編輯

我想保羅的建議,現在我得到這個作爲綁定錯誤從窺探:

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')

SOLUTION

我本來就不是綁定到我的數據模型,而是XAML對象(在本例中爲MainWindow.xaml)爲了綁定到數據,我必須添加引用'DataContext',如下所示:

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

訪問它,你可以點擊接受剔提供一個名稱對於其中一個答案(相對於在問題標題中加入已解決的問題) – 2016-06-02 14:14:01

回答

2

你已經有Window集到MainPageViewModelDataContext。子元素將繼承此DataContext,因此不需要相對路徑。所有你需要的是:

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

您當前的代碼是尋找一個屬性上Window控制本身,而不是視圖模型稱爲MainContentVisibility

+0

請參閱我對OP的編輯(因此我可以使用blcok引用使評論更易於閱讀)。 – BrianKE 2014-11-24 18:51:41

+0

檢查您的定位器。你確定'MainPageViewModel'屬性實際上是返回一個'MainPageViewModel'?因爲這說定位器給你一個'CompanyInfoViewModel'。 – 2014-11-24 18:59:43

+0

我必須剪下並粘貼不正確。我重新運行了Snoops並更新了我的OP編輯。它試圖綁定到MainPageViewModel,但即使我可以在使用Snoops的MainPageViewModel中清楚地看到MainContentVisibility屬性,它仍然不會綁定到它。 – BrianKE 2014-11-24 19:22:20

3

我認爲MainContentVisibility不在ViewModel上?

如果您要訪問它的主窗口的屬性從視圖模型走,然後如x:Name="MyMainWindow"的窗口,並在結合

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