Как показать новое окно, когда кнопка содержит команду DataContext

У меня есть этот контейнер для моей модели представления под названием VMContainer в моем XAML

<Window.DataContext>
    <local:VMContainer/>
</Window.DataContext>

Если я получу доступ к нему из своего контейнера, кнопка не будет работать и ничего не произойдет. но если я обращаюсь к нему напрямую в мою модель просмотра MOVIE, он работает. И я не понимаю, как это может случиться.

Вот мой контейнер

public class VMContainer
{
    public Movie Movie { get; set; } = new Movie();
    public TV TV { get; set; } = new TV();
}

Одна из моих ViewModel

public class Movie
{
    public ICommand Clicked { get; private set; }
    public DataView Library { get; private set; }
    public Movie()
    {
        DataTable data = new DataTable();
        using (MySqlConnection connection = new MySqlConnection("SERVER=localhost;" + "DATABASE=library;" + "UID=root;" + "PASSWORD=;"))
        {
            MySqlDataAdapter adapter = new MySqlDataAdapter();
            adapter.SelectCommand = new MySqlCommand("Select * from index_movie_list", connection);
            adapter.Fill(data);
        }
        Library = data.DefaultView;
        Clicked = new MovieClicked(this);
    }
}

Нажмите Method
Pages.MovieDetail - это цель для нового окна, но даже несмотря на то, что я меняю Execute на простой MessageBox, он по-прежнему ничего не делает

 partial class MovieClicked : ICommand
{
    private Movie __vModel;

    public MovieClicked(Movie vModel)
    {
        __vModel = vModel;
    }
    public event EventHandler CanExecuteChanged { add { } remove { } }
    public bool CanExecute(object parameter)
    {
        return true;
    }
    private static int a;
    private static string b;
    private static string c;
    public static DataTable d = new DataTable();
    public void Execute(object parameter)
    {
        var id_movie = (int)parameter;
        var rowIndexx = id_movie - 1;
        a = (int)(__vModel.Library[rowIndexx]["id_movie"]);
        b = (string)(__vModel.Library[rowIndexx]["target"]);
        c = (string)(__vModel.Library[rowIndexx]["title"]);
        using (MySqlConnection connection = new MySqlConnection("SERVER=localhost;" + "DATABASE=library;" + "UID=root;" + "PASSWORD=;"))
        {
            MySqlDataAdapter adapter = new MySqlDataAdapter();
            connection.Open();
            adapter.SelectCommand = new MySqlCommand("Select * from index_movie_list where id_movie ='" + a + "'", connection);
            adapter.Fill(d);
            connection.Close();
        }
        z = a;
        x = b;
        y = c;
        Pages.MovieDetail subWindow = new Pages.MovieDetail();
        subWindow.Show();
    }
    public static int z;
    public static string x;
    public static string y;
}

и последний мой XAML
мой xaml содержит id_movie для получения идентификатора, в котором я нажимаю кнопку

<ItemsControl Background = "#191919" ItemsSource = "{Binding Path=Movie.Library}" BorderThickness = "0">
<ItemsControl.ItemTemplate>
    <DataTemplate DataType = "viewModels:Card">
        <Button Style = "{StaticResource OrangeButton}" Margin = "0,2,0,0" Command = "{Binding Path=DataContext.Clicked, RelativeSource = {RelativeSource FindAncestor, AncestorType=Window}}" CommandParameter = "{Binding Path=id_movie}">
            <StackPanel Margin = "0,0,0,0">
                <Grid Margin = "5,5,5,5">
                    <Rectangle RadiusX = "0" RadiusY = "0" Width = "150" Height = "230">
                        <Rectangle.Fill>
                            <ImageBrush  x:Name = "myImage" ImageSource = "{Binding Path=cover}"/>
                        </Rectangle.Fill>
                    </Rectangle>
                    <Label FontFamily = "Bebas Neue" Background = "#CC000000" Margin = "115,10,0,193" Content = "{Binding Path=year}" HorizontalContentAlignment = "right" Foreground = "White"/>
                    <Label FontFamily = "Bebas Neue" Width = "150" Background = "#CC000000" Margin = "0,187,0,16" Content = "{Binding Path=title}" HorizontalContentAlignment = "Center" Foreground = "White"/>
                </Grid>
            </StackPanel>
        </Button>
    </DataTemplate>
</ItemsControl.ItemTemplate>

Примечание:, если я использую Movie напрямую без контейнера, моя кнопка работает, но я не могу использовать ее для другой ViewModel.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
25
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка в пути Binding для команды Clicked.

<Button  Margin = "0,2,0,0" Command = "{Binding Path=DataContext.Movie.Clicked, RelativeSource = {RelativeSource FindAncestor, AncestorType=Window}}" CommandParameter = "{Binding Path=id_movie}"></Button>

Другие вопросы по теме