Я создаю приложение WPF, используя Caliburn.Micro для MVVM. Я пытаюсь добавить клиента во время работы приложения, но не могу получить ComboBox для обновления / refre sh. Печатая на консоль, я подтвердил, что в BindableCollection есть элемент, добавляемый к нему, но хотя я включил строку:
NotifyOfPropertyChange(() => Clients);
в определение свойства, ComboBox не обновлено / обновлено.
Вот код:
Элемент управления ComboBox в ShellView.xaml
<ComboBox Grid.Column="2" Grid.Row="1" MinWidth="200" Margin="0,0,0,5"
x:Name="Clients" SelectedItem="{Binding SelectedClient}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ClientName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Элемент управления кнопкой в NewClientView.xaml
<Button x:Name="AddClient" Content="Add Client" Width="100" Margin="5"/>
Свойство в ShellViewModel.cs:
public BindableCollection<ClientModel> Clients
{
get
{
return _clients;
}
set
{
_clients = value;
NotifyOfPropertyChange(() => Clients);
}
}
Обратный код кнопки в NewClientViewModel.cs (пользовательский элемент управления для добавления нового клиента):
public void AddClient(BindableCollection<ClientModel> Clients)
{
DataAccess.Clients.Add(new ClientModel
{
ClientName = ClientNameInput,
ClientProducts = null
});
Clients = new BindableCollection<ClientModel>(DataAccess.Clients);
TryClose(true);
}
Любой идеи? Спасибо.
* Редактировать 1
Когда я пытаюсь добавить клиента напрямую с помощью этого кода:
public void AddClient(BindableCollection<ClientModel> Clients)
{
Clients.Add(new ClientModel
{
ClientName = ClientNameInput,
ClientProducts = null
});
TryClose(true);
}
он выдает «System.Reflection.TargetInvocationException» - Inner Исключение 1: NullReferenceException: ссылка на объект не установлена для экземпляра объекта.
* Редактировать 2
Конструктор для моей ShellViewModel:
public ShellViewModel()
{
Clients = new BindableCollection<ClientModel>(GenerateTestData());
}
GenerateTestData () возвращает Список типа ClientModel.
Призыв открыть UserControl для добавления нового клиента:
public void LoadNewClient()
{
ActivateItem(new NewClientViewModel());
}