MVVMの学習を始めたばかりです。このMVVM チュートリアルに従ってアプリケーションをゼロから作成しました(すべての MVVM 初心者に強くお勧めします)。基本的に、これまでに作成したのは、ユーザーがデータを追加するいくつかのテキスト ボックスと、そのデータを保存するためのボタンです。これにより、作成されたすべてのエントリが ListBox に取り込まれます。
ここで行き詰まりました。ListBoxItem をダブルクリックして、作成して ViewModel に追加したコマンドをトリガーできるようにしたいのです。XAML 側を終了する方法がわかりません。つまり、そのコマンドを ListBox(Item) にバインドする方法がわかりません。
XAML は次のとおりです。
...
<ListBox
Name="EntriesListBox"
Width="228"
Height="208"
Margin="138,12,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
ItemsSource="{Binding Entries}" />
...
ビューモデルは次のとおりです。
public class MainWindowViewModel : DependencyObject
{
...
public IEntriesProvider Entries
{
get { return entries; }
}
private IEntriesProvider entries;
public OpenEntryCommand OpenEntryCmd { get; set; }
public MainWindowViewModel(IEntriesProvider source)
{
this.entries = source;
...
this.OpenEntryCmd = new OpenEntryCommand(this);
}
...
}
最後に、ユーザーが EntriesListBox 内の項目をダブルクリックしたときに実行する OpenEntryCommand を次に示します。
public class OpenEntryCommand : ICommand
{
private MainWindowViewModel viewModel;
public OpenEntryCommand(MainWindowViewModel viewModel)
{
this.viewModel = viewModel;
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public bool CanExecute(object parameter)
{
return parameter is Entry;
}
public void Execute(object parameter)
{
string messageFormat = "Subject: {0}\nStart: {1}\nEnd: {2}";
Entry entry = parameter as Entry;
string message = string.Format(messageFormat,
entry.Subject,
entry.StartDate.ToShortDateString(),
entry.EndDate.ToShortDateString());
MessageBox.Show(message, "Appointment");
}
}
助けてください、よろしくお願いします。