Я работаю над некоторым приложением, и у меня есть одна проблема. У меня есть два окна (заказы - родители и гости - ребенок). В родительском окне у меня есть один комбинированный блок со списком гостей и одна кнопка для добавления нового гостя. Когда я нажимаю на эту кнопку, открывается окно «Пользователи» (дочернее окно). В дочернем окне я добавляю нового гостя в базу данных, и это отлично работает. Мой вопрос: Как обновить/обновить список со списков в родительском окне после добавления нового гостя в дочернем окне? Я знаю, что изменения в свойстве должны отражаться в представлении без извлечения данных из базы данных (благодаря привязке).Обновить список combobox из другого окна, MVVM
Bookings.xaml
<ComboBox ItemsSource="{Binding Path=Guests}" SelectedItem="{Binding Path=Guest}" Height="25" HorizontalAlignment="Left" IsEditable="True" IsTextSearchEnabled="True" Margin="119,10,0,0" Name="cbGuest" Padding="3,1,1,1" TextSearch.TextPath="Name" VerticalAlignment="Top" VerticalContentAlignment="Center" Width="141" FontFamily="Times New Roman" FontWeight="Bold" FontSize="14">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock DataContext="{Binding}" Text="{MultiBinding StringFormat='\{0\} ', Bindings={Binding Path=Name}}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<Button BorderBrush="Black" Command="{Binding Path=btnAddGuest}" Content="Novi Gost" FontFamily="Times New Roman" FontWeight="Bold" Height="25" HorizontalAlignment="Left" IsDefault="True" Margin="266,10,0,0" Name="btnNewGuest" VerticalAlignment="Top" Width="62" />
BookingsViewModel.cs
private tblGuest guest;
public tblGuest Guest // Selected guest from combo box
{
get
{
return guest;
}
set
{
guest = value;
OnPropertyChanged("Guest");
}
}
private ObservableCollection<tblGuest> guests;
public ObservableCollection<tblGuest> Guests // Guests list in the combo box
{
get
{
return guests;
}
set
{
guests = value;
OnPropertyChanged("Guests");
}
}
public ICommand _btnAddGuest;
public ICommand btnAddGuest // Command for opening child window
{
get
{
if (_btnAddGuest == null)
{
_btnAddGuest = new DelegateCommand(delegate()
{
try
{
Guests guest = new Guests();
guest.ShowDialog();
}
catch
{
Trace.WriteLine("working...", "MyApp");
}
});
}
return _btnAddGuest;
}
}
Guests.xaml
<Button Command="{Binding Path= btnAddGuest}" Content="Dodaj" FontFamily="Times New Roman" FontWeight="Bold" Height="36" HorizontalAlignment="Left" Margin="12,402,0,0" Name="btnAddGuest" VerticalAlignment="Top" Width="62" IsDefault="True" />
Эта кнопка (в окне Guest.xaml) добавляет нового гостя в базу данных.
GuestViewModel.cs
private tblGuest guest;
public tblGuest Guest // Guest to be added into database
{
get
{
return guest;
}
set
{
guest = value;
OnPropertyChanged("Guest");
}
}
public ICommand _btnAddGuest;
public ICommand btnAddGuest // Command for adding new guest
{
get
{
if (_btnAddGuest == null)
{
_btnAddGuest = new DelegateCommand(delegate()
{
try
{
Service1Client wcf = new Service1Client();
wcf.AddGuest(Guest); // "AddGuest()" WCF method adds new guest to database
wcf.Close();
}
catch
{
Trace.WriteLine("working...", "MyApp");
}
});
}
return _btnAddGuest;
}
}
Как решить эту проблему? Есть ли простой способ? Вы можете, пожалуйста, объясните подробно свое решение, потому что я новичок в WPF, WCF и MVVM ...
С наилучшими пожеланиями, Владимир
Где код для кнопки, которая открывает окно гостей? Если он не беспокоит, он откроет диалоговое окно «Гость-Окно», поэтому в следующей строке после диалога откроется окно «Гость», и вы можете получить коллекцию гостей из базы данных. – Marguth