2

しばらく前に、このチュートリアルで MVVM パターンの学習を開始しました。MicroMvvm を使用しています。

EntityFramework モデルを使用した WPF プロジェクトがあります。ViewModel と XAML ビューを作成しました。データを DataGrid に表示したい (データを含む 2 つの列と 2 つのボタン列: 編集、削除)

<DataGrid Height="250" ItemsSource="{Binding Books}" AutoGenerateColumns="False" >
    <DataGrid.Resources>
        <DataTemplate x:Key="DeleteTemplate" >
            <Button x:Name="DeleteButton" Command="{Binding DeleteBook, Mode=OneWay}" CommandParameter="{Binding}" >Delete</Button>
        </DataTemplate>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Title}"  Header="Book"/>
        <DataGridTextColumn Binding="{Binding Author}"  Header="Author"/>
        <DataGridTemplateColumn  CellTemplate="{StaticResource EditTemplate}" Header="Редактировать"/>
        <DataGridTemplateColumn  CellTemplate="{StaticResource DeleteTemplate}" Header="Удалить"/>
    </DataGrid.Columns>
</DataGrid>

私のLibraryViewModel.csで

#region Commands
void DeleteBookExecute()
{
    if (_books == null)
        return;

    //MessageBox.Show("This is delete button. Delete item id:" myMysticalObjectFromCommandParameter );
}
bool CanDeleteBookExecute()
{
    return true;
}
public ICommand DeleteBook
{
    get
    {
        return new RelayCommand(DeleteBookExecute, CanDeleteBookExecute);
    }
}

ボタン (削除/編集) を押すと、現在のオブジェクトを削除/編集したい。MVVMでそれを行う方法がわかりません。

でできますCommand="{Binding DeleteBook, Mode=OneWay}" CommandParameter="{Binding}"か?

正しい場合CommandParameter、LibraryViewModel からデータを取得するにはどうすればよいですか?

4

2 に答える 2

2

DHN が言うように、コマンド実行メソッドDeleteBookExecute()CanDeleteBookExecute()はオブジェクト型のパラメーターが必要です。

あなたのアイデアは正しい方向を指しています。これを試して:

<DataGrid Name="LibraryGrid"
          Height="250" 
          ItemsSource="{Binding Books}" 
          AutoGenerateColumns="False" >

Command="{Binding DataContext.DeleteBook, ElementName=LibraryGrid}" CommandParameter="{Binding}"

ElementNameをとともに使用するとDataContext.DeleteBook、LibraryViewModel のコマンドが取得されます。

于 2013-03-08T11:54:29.153 に答える
2

コマンド メソッドにパラメーターがないことに少し興味があります。私は彼らがこのように見えることを期待します

void DoSomething(object param) {}
bool CanDoSomething(object param) {}

それでも、のプロパティを VM のプロパティSelectedItemにバインドします。DataGrid詳細については、こちらをご覧ください。

<DataGrid ItemsSource={Binding Books} SelectedItem={Binding SelectedBook} />

したがって、コマンドで「現在の」アイテムに簡単にアクセスできます。

これが少し役立つことを願っています。

于 2013-03-08T10:54:57.677 に答える