Вот модель:WPF Уведомлять реализации цепи
public class Customer
{
string Name;
public ObservableCollection<Order> orders;
}
public class Order
{
int Id;
public ObservableCollection<RequestStorage> Requests;
}
public class RequestStorage
{
string Text;
public ObservableCollection<Response> Responses;
}
public class Response
{
string Text;
}
CustomersView.xaml обязан CustomersViewModel, который имеет свойство ObservableCollection<*Customer*> Customers;
CustomersViewModel
<!-- language: c# -->
public class CustomersViewModel
{
public CustomersViewModel()
{
//Load customers from database to Customers
}
public ObservableCollection<Customer> Customers { get; set; }
}
CustomersView.xaml окна DataContext
набор для CustomersViewModel
<DataGrid ItemsSource="{Binding Path=Customers}">
...
<DataGridTextColumn Header="Customer name" Binding="{Binding Path=Name}" />
...
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding Path=Orders}">
...
<DataGridTextColumn Binding="{Path=Id}" />
<DataGridTemplateColumn>
<ItemsControl Binding="{Path=Requests}" />
</DataGridTemplateColumn>
<DataGridTemplateColumn>
<ItemsControl DataContext="{Binding Requests}" Binding="{Path=Responses}" />
</DataGridTemplateColumn>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
Q: Как оповестить CustomersViewModel, когда сбор ответов изменилось (например, добавлен новый ответ), так что CustomersView.xaml обновит свой пользовательский интерфейс для указанного клиента?
Можете ли вы опубликовать CustomerViewModel? Немного больше информации облегчает помощь. – Marc
Что именно вы пытаетесь достичь? Если дизайн представлений хорош, вам не нужно уведомлять «CustomerView», потому что у вас есть что-то (например, «ResponsesList'), которое визуализирует коллекцию ответов. В этом случае у вас будет элемент 'DataTemplate', который будет обновляться автоматически. – DHN
1. У меня есть «CustomerView.xaml» с «DataContext = CustomersViewModel». 2. 'CustomersView.xaml' имеет' DataGrid' с 'ItemsSource = Customers'. 3. Столбец «DataGrid» «Имя клиента» связан как «Binding = {Binding Path = Name}» 4. «DataGrid.RowDetails' имеет« DataGrid », который привязан к« Запросам »и« Ответы ». 5. Когда приложение запускается, все работает нормально, все данные отображаются так, как должно быть. 6. Когда я программно добавляю новый 'Response', данные в' DataGrid' не обновляются. Мне нужно, чтобы пользовательский интерфейс обновлялся onfly при изменении данных. –