MVVM スタイルのサンプル WPF アプリケーションでデータ バインディングを機能させるのは難しいと感じています。
質問:
次のサンプルには何が欠けていますか?
詳細:
基本構造:
モデル: Customer
(実際には関係ありません)
ビューモデル: AllCustomersViewModel
意見: WizardWindowView
構造要素:
VM による公開: AllCustomers
(ObservableCollection 型)
ビューに表示: ListView
バインドしたい: ListView <-> AllCustomers
WizardWindowView.xaml:
<Window
...
...
<Window.Resources>
<CollectionViewSource x:Key="CustomerGroups" Source="{Binding Path=AllCustomers}"/>
</Window.Resources>
<Grid>
...
...
<aw:WizardPage Header="Step 1">
<ListView
ItemsSource="{Binding Source={StaticResource CustomerGroups}}"/>
</aw:WizardPage>
...
...
</Grid>
</Window>
データ バインディングがどのように行われるかを理解しようと、すでに 10 時間以上を費やしており、助けを求める時が来たと感じています。
編集
モデル情報:
データ: customers.xml
モデル: Customer.cs
データアクセス: CustomerRepository.cs
AllCustomersViewModel:
readonly CustomerRepository _customerRepository;
public AllCustomersViewModel(CustomerRepository customerRespository) {...}
編集2
呼び出しのシーケンス:
App.xaml.cs.OnStartup() {.. new MainWindowViewModel("Data/customers.xml")..};
public MainWindowViewModel(string customerDataFile)
{
_customerRepository = new CustomerRepository(customerDataFile);
new AllCustomersViewModel(_customerRepository);
}
編集3
データコンテキスト:
App.xaml.cs で:
MainWindow window = new MainWindow();
string path = "Data/customers.xml";
var viewModel = new MainWindowViewModel(path);
window.DataContext = viewModel;
MainWindow.xaml.cs (分離コード):
private void ShowWizardWindow(object sender, RoutedEventArgs e)
{
Views.WizardWindowView wizardWindow = new Views.WizardWindowView();
wizardWindow.DataContext = this.DataContext;
wizardWindow.Show();
}