WPF:从ListView ViewBase中找到父窗口

时间:2010-09-14 07:17:18

标签: c# wpf binding generic.xaml

我有一个ListView,允许用户通过上下文菜单更改ViewBase(它就像一个简化版的Windows资源管理器)。

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

ViewBases DataTemplates在Generic.XAML文件中定义,我使用以下函数更改所选视图:

 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的Parent时,我可以达到的最高级别是正在使用的DataTemplate

我需要访问的是父窗口本身。

注意:的  我试图将一个依赖属性添加到自定义CheckBox控件并将其绑定到已发送对象(数据模板的项目DataType对象)中的一个额外定义的变量,该变量有一个窗口引用作为其值,但我仍然保持为null,即使所有其他依赖属性/值已绑定。

1 个答案:

答案 0 :(得分:2)

这取决于你是如何找到父母的。我强烈推荐this文章(Josh Smith)来真正了解WPF中发生的事情。

那就是说,你可以尝试Window.GetWindow(myControl);(静态方法);它适用于任何纯WPF树(与WinForms互操作,请参阅this)。