Я использую Caliburn.Micro и имею две ViewModel в качестве ContentControls в моем ShellView.xaml.Первый содержит ListView, а второй содержит TextBox.У меня есть доступ к SelectedItem для ListView, но я не знаю, как изменить текст для TextBox.
ShellView.xaml
<ContentControl x:Name="MyLocalViewModel"/>
<ContentControl x:Name="GameDetailsViewModel" Grid.Column="2" Grid.Row="2"/>
LocalView.xaml
<ListView x:Name="ListView" ItemsSource="{Binding GameModel}" SelectedValuePath="Key"
cal:Message.Attach="[Event SelectionChanged] = [Action SelectionChanged($this)]">
LocalViewModel.cs
public void SelectionChanged(KeyValuePair<Tuple<string, string>, GameDataModel> selectedGame)
{
string gameName = selectedGame.Value.GameName;
}
GameDetailsView.xaml
<TextBox Text="{Binding Path=Testing, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
GameDetailsViewModel.cs
private string testing;
public string Testing
{
get { return testing; }
set
{
testing = value;
NotifyOfPropertyChange(() => Testing);
}
}
В selectionChanged я хочу указать значение gameNameв текстовое поле в GameDetailsView
Редактировать:
ОК, я думаю, я понял это.Я не знаю, если это правильный путь, но, похоже, он работает.
SHellViewModel.cs
public ShellViewModel(LocalViewModel localViewModel, SDViewModel sdViewModel, GameDetailsViewModel gameDetailsViewModel)
{
MyLocalViewModel = localViewModel;
SDViewModel = sdViewModel;
GameDetailsViewModel = gameDetailsViewModel;
MyLocalViewModel.GameDetailsViewModel = GameDetailsViewModel;
}
А затем в LocalViewModel.cs
public void SelectionChanged(KeyValuePair<Tuple<string, string>, GameDataModel> selectedGame)
{
string gameName = selectedGame.Value.GameName;
GameDetailsViewModel.Testing = gameName;
}