Я нашел решение.
// MainViewModel.cs
TestDialogViewModel vm;
...
public async void NewConnection()
{
vm = IoC.Get<TestDialogViewModel>();
var dialog = new TestDialogView()
{
DataContext = vm
};
var result = await DialogHost.Show(dialog, "MainDialogHost",
(object sender, DialogOpenedEventArgs eventArgs) =>
{
// pass DialogSession to ViewModel.
// View Model can close own dialog !
vm.dialogSession = eventArgs.Session;
},
(object sender, DialogClosingEventArgs eventArgs) =>
{
Debug.WriteLine($"IPaddress = "+vm.IpAddress);
});
}
и
<!-- in MainView.xaml -->
<materialDesign:DialogHost Identifier="MainDialogHost"
CloseOnClickAway="True"
cal:Message.Attach="[Event DialogClosing]=[Action DialogHost_OnDialogClosing()]"
>
и ..
// in TestDialogViewModel
public DialogSession dialogSession;
public void BtnConnect()
{
dialogSession.Close();
}
и ..
<!-- in TestDialogView.xaml -->
<StackPanel Margin="20" Orientation="Vertical">
<TextBlock>Input IP Address</TextBlock>
<TextBox Margin="0 20 0 10"
FontSize="28"
HorizontalAlignment="Stretch"
Text="{Binding Path=IpAddress, Mode=TwoWay}"
TextAlignment="Center"/>
<TextBlock Foreground="Red" TextAlignment="Center" HorizontalAlignment="Center"></TextBlock>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button Style="{StaticResource MaterialDesignFlatButton}"
cal:Message.Attach="[Event Click]=[Action BtnConnect()]"
IsDefault="True"
Margin="0 8 8 0">
<Button.CommandParameter>
<system:Boolean xmlns:system="clr-namespace:System;assembly=mscorlib">True</system:Boolean>
</Button.CommandParameter>
Connect
</Button>
</StackPanel>
</StackPanel>
Скриншоты.
Это поможет кому-то Caliburn.Micro пользователь!
:)