WPF: найдите родительское окно из ListView ViewBase
У меня есть 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 определены в файле 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;
}
}
Эта проблема:
Я получил пользовательский элемент управления CheckBox во всех шаблонах данных, к которому прикреплено предварительно определенное событие нажатия, однако, когда я пытаюсь переместиться вверх по родительскому элементу CheckBox,наивысшим уровнем, которого я могу достичь, является сетка родительских элементов в используемом шаблоне данных.
Мне нужен доступ к самому Родительскому окну.
Примечание. Я попытался добавить свойство зависимости в пользовательский элемент управления CheckBox и связать его с дополнительной определенной переменной в отправляемом объекте (объект DataType элементов данных), для которого в качестве значения была ссылка на окно, но я продолжал получать значение NULL, хотя все другие свойства / значения зависимости были связаны.
1 ответ
Это зависит от того, как вы пытаетесь добраться до родителей. Я настоятельно рекомендую эту статью (Джош Смит), чтобы получить реальное представление о том, что происходит в WPF.
Тем не менее, вы можете попробовать Window.GetWindow(myControl);
(статический метод); это должно работать для любых чистых деревьев WPF (для взаимодействия с WinForms, см. это).