私はこのようなことをします
意見:
<DataGrid x:Name="myGrid" ItemsSource="{Binding Companies}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding CompanyName}"/>
</DataGrid.Columns>
<ie:Interaction.Triggers>
<ie:EventTrigger EventName="SelectionChanged">
<ie:InvokeCommandAction Command="{Binding SelectedItemChangedCommand}" CommandParameter="{Binding ElementName=myGrid, Path=SelectedItem}"/>
</ie:EventTrigger>
</ie:Interaction.Triggers>
</DataGrid>
<ComboBox ItemsSource="{Binding SelectedCompanyPhoneNumbers}"/>
ビューモデル:
public class MainWindowViewModel
{
public MainWindowViewModel()
{
SelectedItemChangedCommand = new DelegateCommand<object>((selectedItem) =>
{
var selected = selectedItem as Company;
SelectedCompanyPhoneNumbers = selected.CompanyPhoneNumbers;
});
}
public view LoadCompanies()
{
// Load the companies information from different tables ...
}
public List<Company> Companies { get; set; }
public DelegateCommand<object> SelectedItemChangedCommand { get; set; }
public List<string> SelectedCompanyPhoneNumbers { get; set; }
}
モデル:
public class Company
{
public string CompanyName { get; set; }
public List<string> CompanyPhoneNumbers { get; set; }
}
この例では Prism フレームワークを使用しました。i
とは、名前空間へのie
ショートカットです。
xmlns:i="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:ie="http://schemas.microsoft.com/expression/2010/interactivity"
ここで何が起こるかというと、viewModel は選択された会社の電話番号のリストを保持しています。会社が変更されると (この例では、グリッド内の別の行が選択されます)、選択された会社の電話番号がそれに応じて変更されます。
MVVM に関するいくつかの適切なリンクを次に示します。
http://www.codeproject.com/Articles/165368/WPF-MVVM-Quick-Start-Tutorial
http://www.codeproject.com/Articles/126249/MVVM-Pattern-in-WPF-A-Simple-Tutorial-for-Absolute
http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
幸運を