Привязки команд не работают со вторым окном / видом - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть WPF-приложение с двумя windows в качестве просмотров (MVVM). С первой связывание команд работает довольно хорошо, хотя со вторыми командами представления не срабатывают (обе windows обращаются к одной и той же модели представления). Неважно, связаны ли они с кнопкой или ключевым событием и т. Д. c. Я заметил одну вещь; В окне свойств привязка команды не отображается в текстовом поле команды, хотя, как я догадываюсь, это необходимо.

Еще одна вещь, которую стоит упомянуть: 2-е окно / представление будет отображаться после нажатия кнопки в первом представлении + Первое окно все еще видно. Datacontext также будет делегирован во 2-й вид.

Вот последовательность моего кода:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:vm="clr-namespace:Lobpreis.ViewModels"
    xmlns:Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Classic" x:Class="Lobpreis.Views.LiederlisteView"
    mc:Ignorable="d"
    Title="LiederlisteView" WindowStyle="SingleBorderWindow" Height="450" Width="800" >

<Window.DataContext>
    <vm:ShellViewModel/>
</Window.DataContext>

<Window.InputBindings>
    <KeyBinding Key="Down" Command="{Binding PressKeyDown}" />
    <KeyBinding Key="Up"  Command="{Binding PressKeyUp}" />
</Window.InputBindings>

<Grid > etc...

Вот как я обработал передачу Datacontext:

LiederlisteView MeineLiederlisteView = new LiederlisteView();
        MeineLiederlisteView.DataContext = this;
        MeineLiederlisteView.ShowDialog();
        MeineLiederlisteView.Focus();

1 Ответ

0 голосов
/ 17 апреля 2020

Вы пытаетесь привязать DataContext 2-го представления к 1-му представлению, а не DataContext 1-го представления.

Попробуйте заменить

MeineLiederlisteView.DataContext = this;

на

MeineLiederlisteView.DataContext = this.DataContext;
...