ビューごとに1つのビューモデルが必要です。ビュー内のアイテムごとではありません(この場合はボタン)。あなたが記述しているものを行う簡単な方法は、あなたのexeファイル名を渡すCommmandParameter
プロパティを使用することです:あなたのコマンドで
<Button Content="Launch IE" Command="{Binding LaunchAppCommand}" CommandParameter="IExplorer.exe"/>
<Button Content="Launch Notepad" Command="{Binding LaunchAppCommand}" CommandParameter="notepad.exe"/>
<Button Content="Launch Chrome" Command="{Binding LaunchAppCommand}" CommandParameter="chrome.exe"/>
:
public ICommand LaunchAppComand {get; private set;}
...
public MyViewModel()
{
LaunchAppCommand = new DelegateCommand(LaunchApp);
}
...
private void LaunchApp(object parameter)
{
string processName = (string)parameter;
Process launchProc = new Process();
launchProc.StartInfo.FileName = processName;
launchProc.Start();
}
ハードあなたはできるすべてのボタンをコーディングないようにするにはItemsControl
を使用します。ItemsControl
は、作成するテンプレートごとに個別のデータコンテキストを設定します。 ItemsControl
は、あなたが得るために結合ElementName
を必要とするバインドされた項目にテンプレート内DataContext
を設定するので
//ProcessShortcut.cs
public class ProcessShortcut
{
public string DisplayName {get; set;}
public string ProcessName {get; set;}
}
//MyViewModel.cs, include the previous code
//INotifyPropertyChanged left out for brevity
public IEnumerable<ProcessShortcut> Shortcuts {get; set;}
public MyViewModel()
{
Shortcuts = new List<ProcessShortcut>()
{
new ProcessShortcut(){DisplayName = "IE", ProcessName="IExplorer.exe"},
new ProcessShortcut(){DisplayName = "Notepad", ProcessName="notepad.exe"},
new ProcessShortcut(){DisplayName = "Chrome", ProcessName="chrome.exe"},
};
}
//MyView.xaml
<Window x:Name="Root">
...
<ItemsControl ItemsSource="{Binding Shortcuts}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding DisplayName, StringFormat='{}Start {0}'}"
Command="{Binding ElementName=Root, Path=DataContext.LaunchAppCommand}"
CommandParameter="{Binding ProcessName}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
...
</Window>
:そのためには、データクラスのコレクション、そしてあなたのコマンドに取得するには、わずかに異なる方法が必要ですコマンドには、ProcessShortcut
のメンバーへのアクセス権を取得する必要はありません。長期的には、これはあなたがこのような反復的なコントロールを持っているときに取っておきたいアプローチです。
なぜ、各ボタンには独自のデータコンテキストがありますか?あなたがアイテムコントロールにいない限り、それは正しいとは言えません。 – BradleyDotNET
お返事ありがとうございます。私が言ったように、私はこれには新しく、デザインパターンを掴むのに苦労しています。あなたは私が違ったやり方で何をすべきか/これにアプローチする方法を提案できますか? –
2つの提案、実際には:) – BradleyDotNET