Как получить доступ к свойствам одной ViewModel из другой, которые используют ContentControls и Caliburn.Micro? - PullRequest
0 голосов
/ 16 июня 2019

Я использую 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;
}
...