Привязка строки DataGrid к методу в ViewModel - PullRequest
0 голосов
/ 03 октября 2018

Я получил DataGrid и хочу создать CRUD с ним, он привязан к ObservableCollection в ViewModel, и я создал в каждой строке его кнопку Delete, проблема в том, что когда я нажимаю кнопку, событие запускается изМодель, а не ViewModel, поэтому я не могу получить доступ к Коллекции, а только к выбранному объекту

, это мой вид:

<DataGrid x:Name="EmployeeDataGrid" AutoGenerateColumns="False" ItemsSource="{Binding Path=Employees}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="First Name" Binding="{Binding FirstName}"/>
            <DataGridTextColumn Header="Last Name" Binding="{Binding LastName}"/>
            <DataGridTextColumn Header="Date Of Birth" Binding="{Binding DateOfBirth}"/>
            <DataGridTextColumn Header="Address" Binding="{Binding Address}"/>
            <DataGridTextColumn Header="Salary" Binding="{Binding Salary}"/>
            <DataGridTextColumn Header="Function" Binding="{Binding Function}"/>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button Click="{Binding Path=Update_Click}">Update</Button>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button >Delete</Button>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
</DataGrid>

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

В вашей ViewModel создайте свойство ICommand, для которого задан класс команд, который принимает параметр, такой как this (MvvmLight) - параметр является экземпляром класса вашего сотрудника.

Вы можете привязать кнопку в вашем шаблоне следующим образом:

<Button Content="Update"
        Command="{Binding Path=DataContext.UpdateCommand,
                  RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
        CommandParameter="{Binding}" />

Привязка CommandParameter передает элемент сотрудника для этой строки DataGrid.

0 голосов
/ 03 октября 2018

Добавьте свойство к вашей модели, например public object Tag { get; set; }.

Когда создается объект экземпляра строки, назначьте ссылку на виртуальную машину или все, что вы пытаетесь получить, в Tag.Таким образом, когда операция выполняется из экземпляра, как упоминалось, просто отмените ссылку Tag на необходимую ссылку на класс и используйте то, на что она указывает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...