我正在使用 UWP 和模板 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 模式。你能帮我以正确的方式做吗?
编辑:
我已经实现了对话服务并将其注入到主视图模型中。然而,我遇到了另一个障碍。对于这个对话框,我创建了单独的视图模型和封装对话框文本框值的属性。当我按下对话框上的“接受”按钮时 - 我需要将此值反映在我的主视图上。所以我需要将对话框的文本框值从对话框的视图模型传递到主视图模型。我应该执行另一个依赖注入来处理它吗?