У меня есть этот контейнер для моей модели представления под названием VMContainer в моем XAML
<Window.DataContext>
<local:VMContainer/>
</Window.DataContext>
Если я получу к нему доступ из своего контейнера, кнопка не будет работать, и ничего не произойдет.но если я получу доступ непосредственно к моей MOVIE
ViewModel, это будет работать.И я не понимаю, как это может произойти.
Вот мой Контейнер
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);
}
}
Метод Click
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.