Добавление события клика на изображение - PullRequest
0 голосов
/ 22 ноября 2018

Я хочу добавить кликабельное событие, когда оно переходит к определенному действию запроса
Пример: у меня есть этот список 3 Изображение
как добавить действие, когда я щелкаю один из этого списка иэто идет к идентификатору, который я выбрал и что-то делал

Пример Mydb База данных
Запрос

select * from library where id_movie = (the one that i clicked)


Xaml

<ItemsControl ItemsSource="{Binding Path=Library}" Margin="0,0,2,0">
    <ItemsControl.ItemTemplate>
        <DataTemplate DataType="viewModels:Card">
            <UniformGrid Rows="1" Columns="1">
                <StackPanel Orientation="Horizontal" Width="100" Height="150" Margin="10,25,0,0" >
                    <Image Width="100" Source="{Binding Path=cover}"/>
                </StackPanel>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="10,0,0,0">
                    <Label Content="{Binding Path=title}"/>
                </StackPanel>
            </UniformGrid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>


MyClass

public class VModel
{
    public VModel()
    {
        DataTable dt = new DataTable();
        DataSet ds = new DataSet();
        using (MySqlConnection connection = new MySqlConnection("SERVER=localhost;" + "DATABASE=library;" + "UID=root;" + "PASSWORD=;"))
        {
            MySqlDataAdapter adapter = new MySqlDataAdapter();
            adapter.SelectCommand = new MySqlCommand("Select * from movie_list", connection);
            adapter.Fill(dt);
        }

        Library = dt.DefaultView;
    }

    public DataView Library { get; private set; }
}

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Измените контроль изображения на следующий код, это будет кнопка с изображением.Посмотрите, что команда привязана к глобальному DataContext, потому что в viewmodel я объявлю команду.Я использую параметр команды и передаю там Id.

<Button Command="{Binding Path=DataContext.DoSomething, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" CommandParameter="{Binding id}">
     <StackPanel>
          <Image Width="100" Source="{Binding Path=cover}"/>
     </StackPanel>
</Button>

Затем вам нужно объявить команду в ViewModel

public ICommand DoSomething {get;set;}

И инициализировать ее в конструкторе

DoSomething = new DoSomethingCommand(this);

Добавьте еще один класс для определения команды fo

internal class DoSomethingCommand: ICommand
    {
        private VModel vm;

        public PlotPlane(VModel mainViewModel)
        {
            this.vm = mainViewModel;
        }

        public event EventHandler CanExecuteChanged;

        public bool CanExecute(object parameter)
        {
            return true;
        }

        public void Execute(object parameter)
        {

            var id = (id)parameter;

            //do something, use vm to access your viewmodel


        }
    }
0 голосов
/ 22 ноября 2018

Я думаю, это то, что вы ищете.Каждый элемент представляет собой кнопку, которая содержит изображение и метку.Нажатие кнопки вызывает команду (для DataContext окна) с параметром.

<ItemsControl.ItemTemplate>
    <DataTemplate DataType="viewModels:Card">
        <Button Command="{Binding DataContext.QueryCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}" 
                CommandParameter="{Binding Path=id}">
            <StackPanel>
                <Image Width="100" Source="{Binding Path=cover}"/>
                <Label Content="{Binding Path=title}" HorizontalContentAlignment="Center"/>
            <StackPanel>
        </Button>
    </DataTemplate>
</ItemsControl.ItemTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...