У меня есть этот контейнер для моей модели представления под названием 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);
}
}
Нажмите MethodPages.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.





Ошибка в пути 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>