UWP と Template 10 を使用して、MVVM パターンに従って GUI アプリを作成しています。アプリケーションの一部として、メイン ページのボタンを押してコンテンツ ダイアログを呼び出す必要があります。そのため、その目的のためにスタンドアロンの .xaml ファイルに個別の ContentDialog が作成されました。
<ContentDialog
x:Class="UWP1.Views.Speech"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:UWP1.Views"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="Dictate"
PrimaryButtonText="Accept"
SecondaryButtonText="Cancel"
PrimaryButtonClick="ContentDialog_PrimaryButtonClick"
SecondaryButtonClick="ContentDialog_SecondaryButtonClick"
>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150" />
<ColumnDefinition Width="150" />
</Grid.ColumnDefinitions>
<Button Margin="15" Content="Dictate" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Stretch"/>
<Button Margin="15" Content="Clear Text" Grid.Row="0" Grid.Column="1" HorizontalAlignment="Stretch"/>
<TextBlock Grid.Row="1" Grid.ColumnSpan="2" Text="Tap 'Dictate', and speak" FontSize="12" />
<TextBlock Margin="0 10 0 0" Grid.Row="2" Grid.ColumnSpan="2" Text="Message Dication" HorizontalAlignment="Center" FontSize="24" />
<ScrollViewer Grid.Row="3" Grid.ColumnSpan="2" Height="300">
<TextBox Margin="5 5 5 10" AcceptsReturn="True" />
</ScrollViewer>
</Grid>
</ContentDialog>
ボタンを押してメインページで開く/呼び出す適切な方法は何ですか(ビューとビューモデルのロジックを分離しておく必要があるため)?
私が今それを行う方法:
メイン ページから DictateCommand を呼び出します。これにより、ContentDialog のインスタンスが作成され、表示されます。
<AppBarButton Grid.Column="1" Icon="Microphone" IsCompact="True" HorizontalAlignment="Right" Command="{Binding DictateCommand}"/>
public ICommand DictateCommand { get; set; }
public async void Dictate(object obj)
{
var contentDialog = new Speech();
await contentDialog.ShowAsync();
}
私にとってはMVVMパターン違反のようです。正しい方法でそれを行うのを手伝ってもらえますか?
編集:
ダイアログ サービスを実装し、それをメイン ビュー モデルに挿入しました。しかし、私には別の障害がありました。このダイアログでは、ダイアログのテキスト ボックスの値をカプセル化する別のビュー モデルとプロパティを作成しました。ダイアログの「同意」ボタンを押すと、この値がメイン ビューに反映される必要があります。したがって、ダイアログのテキスト ボックスの値をダイアログのビュー モデルからメイン ビュー モデルに渡す必要があります。それに対処するために別の依存性注入を実行する必要がありますか?