Определить, какая кнопка нажата в GridView - UWP

216
15 мая 2018, 09:30

Есть текстовый блок status и коллекция элементов, в каждом checkbox, button с , toggleswith (всё это в gridview через datatemplate, с привязкой к ObservableCollection во вью модели). Надо узнать в каком элементе был нажат чекбокс, кнопка и переключатель. Обычно советуют использовать command и commandparameter, но как я ни пробовал так ничего и не получается. Плюс в кнопке и чекбоксе есть command, а в toggleswith вроде нет.

Для упрощения задачи - при нажатии на кнопку (именно на кнопку, а не на сам элемент гридвью) мне надо передать состояние чекбокса и текстовый блок кнопки в поле status.

viewmodel:

public class VMvalues
{
    public string vmName { get; set; }
    public bool? vmCheck { get; set; }
    public bool vmToggle { get; set; }
    public command_1 Command_1 { get; set; }
    public VMvalues()
    {
        this.Command_1 = new command_1(this);
    }
}
public class VM : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public ObservableCollection<VMvalues> vmCollection { get; set; } = new ObservableCollection<VMvalues>();
    public void vmLoad()
    {
        string[] name = new string[3] { "Kora", "Ora", "Gamora" };
        bool?[] check = new bool?[3] { false, false, false };
        bool[] toggle = new bool[3] { true, false, true };
        for (int i = 0; i < 3; i++)
        {
            vmCollection.Add(new VMvalues()
            {
                vmName = name[i],
                vmCheck = check[i],
                vmToggle = toggle[i]
            });
        }
    }
}

MainPage.xaml.cs

    VM vm = new VM();
    string txtblkVmStatus = "Status";
    public MainPage()
    {
        this.InitializeComponent();
        vm.vmLoad();
    }

MainPage.xaml

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <StackPanel>
        <TextBlock Text="{x:Bind txtblkVmStatus}"/>
        <GridView x:Name="grdvwBaseOCName" ItemsSource="{x:Bind vm.vmCollection}">
            <GridView.ItemTemplate>
                <DataTemplate x:DataType="local:VMvalues">
                    <StackPanel Orientation="Horizontal" >
                        <ToggleSwitch IsOn="{x:Bind vmToggle}" 
                                      OnContent="Вкл" 
                                      OffContent="Выкл"/>
                        <CheckBox IsChecked="{x:Bind vmCheck}" 
                                  IsThreeState="False"/>
                        <Button x:Name="btnName"
                                Command="{x:Bind Command_1}"
                                CommandParameter="?">
                            <TextBlock Text="{x:Bind vmName}"/>
                        </Button>
                    </StackPanel>
                </DataTemplate>
            </GridView.ItemTemplate>
        </GridView>
    </StackPanel>
</Grid>

command_1.cs - сама команда, но что писать в execute не понимаю

public class command_1 : ICommand
{
    public VMvalues vmCommand { get; set; }
    public command_1(VMvalues vMvalues)
    {
        this.vmCommand = vMvalues;
    }
    public event EventHandler CanExecuteChanged;
    public bool CanExecute(object parameter)
    {
        return true;
    }
    public void Execute(object parameter)
    {
        ?
    }
}
READ ALSO
Миграция ASP.MVC [требует правки]

Миграция ASP.MVC [требует правки]

Изменил модельТочнее удалил дополнительные свойства доступа к модели так как посчитал это ненужным кодом и оставил саму модель где и проверяю...

199
Как с таймера вытянуть время?

Как с таймера вытянуть время?

Как с таймера вытянуть время за отработанный промежуток времени ?

208
Функционал к Visual Studio

Функционал к Visual Studio

Есть ли такая возможность, чтобы при наведении на объект(класс, структуру) курсором появлялся список его свойств и методов?

172