2010-09-14 54 views
0

我有一個ListView,允許用戶通過上下文菜單(它的行爲像一個簡化版本的Windows資源管理器)更改ViewBase。WPF:從ListView查找父窗口ViewBase

<ListView Name="lv" Grid.Row ="0" Grid.Column ="1" > 
     <ListView.ContextMenu> 
      <ContextMenu> 
       <MenuItem Header="View1" Click="SwitchViewMenu"/> 
       <MenuItem Header="View2" Click="SwitchViewMenu"/>     
      </ContextMenu> 
     </ListView.ContextMenu> 
     <ListView.View> 
      <local:View1 /> 
     </ListView.View> 
    </ListView> 

的DataTemplates在一個Generic.XAML定義的ViewBases文件,以及i使用下面的函數來改變所選擇的視圖:

void ChangeView(string str) 
    { 
     if (str == "View1") 
     { 
      lv.View = lv.FindResource("View1") as ViewBase; 
     } 
     else if (str == "View2") 
     { 
      lv.View = lv.FindResource("View2") as ViewBase; 
     } 
    } 

問題:

我在所有DataTemplates中都有一個自定義的CheckBox控件,它附帶了一個預定義的點擊事件,但是當我嘗試向上移動CheckBox的父母時,最高的l evel我可以達到的是在DataTemplate使用中的Parenting Grid。

我需要訪問的是父窗口本身。

注: 我試圖依賴項屬性添加到自定義的CheckBox控件,並將其綁定到發送的對象,有一個窗口引用作爲其價值的額外定義的變量(數據模板的項目數據類型的對象) ,但即使所有其他依賴項屬性/值都已綁定,我仍然收到null。

回答

2

這取決於你如何試圖找到父母。我強烈建議this文章(Josh Smith)真正理解WPF中發生的事情。

這就是說,你可以試試Window.GetWindow(myControl);(靜態方法);它應該適用於任何純粹的WPF樹(與WinForms互操作,請參閱this)。

+0

哈哈!我實際上最終找到了一個解決方法,但是你的解決方案能夠以更簡單的方式完美工作,而且代碼更少。 (+1)。 – 2010-09-15 07:13:35