そのバインドをリフレッシュするItemsSourceを取得する方法
GetAll()は、ViewModelのObservableCollectionプロパティです。 :public static ObservableCollection<Customer> GetAll()
{
ObservableCollection<Customer> customers = new ObservableCollection<Customer>();
XDocument xmlDoc = XDocument.Load(Customer.GetXmlFilePathAndFileName());
var customerObjects = from customer in xmlDoc.Descendants("customer")
select new Customer
{
Id = (int)customer.Element("id"),
FirstName = customer.Element("firstName").Value,
LastName = customer.Element("lastName").Value,
Age = (int)customer.Element("age")
};
foreach (var customerObject in customerObjects)
{
Customer customer = new Customer();
customer.Id = customerObject.Id;
customer.FirstName = customerObject.FirstName;
customer.LastName = customerObject.LastName;
customer.Age = customerObject.Age;
customers.Add(customer);
}
return customers;
}
<DockPanel>
<ListBox ItemsSource="{Binding GetAll}"
ItemTemplate="{StaticResource allCustomersDataTemplate}"
Style="{StaticResource allCustomersListBox}">
</ListBox>
</DockPanel>
GetAll()はViewModelのObservableCollectionプロパティです。
はObservableCollectionを満たすためにXMLファイルを読み取るGetAll()モデルメソッドを呼び出します。
これはすべてユーザーが別のビューに移動したときを除いてすべて正常に動作しますが、はXMLファイルを編集して戻ってきます古いデータがまだを表示しています。
どのように私は実際のデータを表示するように、このビューは "バインディングを更新する"と言うことができます。
あまりにも多くのHTML/HTTPのメタファーを使ってWPFについて説明しているような気がしますが、ObservableCollection自体を更新するためのより自然な方法があります。 WPFアプリケーションでデータを編集できるようにすることができます。だから、どんなレベルのヘルプもここで評価されます。
私がGETALL、感謝するのgetAll()を変更しました。問題は、それぞれ別々のGetAll ObservableCollectionをそれぞれのViewModelから取得する2つのビューがあり、ObservableCollectionが1つ変更されたときにもう1つが変更されないことです。どこかでこれらを世界中に保管する必要がありますか? –
編集中に両方のビューが同期されると想定されている場合は、同じオブジェクトを何らかの方法で共有する必要があります。 あなたの場合、コレクションをロードしてキャッシュするデータアクセスシステムが存在する可能性があり、各ViewModelは現在のコレクションを要求します。そうすれば、両者は互いの変更を認識します。 ファイルからコレクションをリロードする必要がある場合は、コレクションオブジェクトが変更されたことをすべてのビューモデルに警告し、新しい参照を取得したらPropertyChangedイベントを発生させる方法があります。 –
だから私のソリューションは、ユーザーコントロール(ビュー)が読み込まれるたびに、DataSourceをリフレッシュするように、素晴らしい、ありがとう! –