我相信您正在这样做。您应该将对视图模型的引用传递给对话框,而不是相反,因为视图模型应该是独立的并且不了解视图的机制。另一方面,对话框知道需要设置哪些视图模型属性。因此将类似于以下内容:
{{1}}
,
视图模型不应处理视图元素。对话框是视图元素。
视图模型可以通过引发和事件(例如将数据模型作为事件args的错误事件)触发用户输入。已注册到事件的视图显示一个对话框,以收集用户输入并将其存储在先前接收的数据模型中。然后,视图在视图模型上执行命令以传回数据模型。
除了事件之外,您还可以将视图绑定到视图模型的属性,例如CheckBox
类型的。在属性更改时,显示对话框并使用bool
返回结果。
或者让视图模型公开一个标志,例如ICommand
和属性HasException
(可用于绑定自定义对话框或表单)。然后自己创建一个简单的模式对话框:
示例对话框
ExceptionDialogModel
您可以将<Grid x:Name="ExampleDialog"
Visibility="Visible"
Panel.ZIndex="100"
VerticalAlignment="Top">
<Rectangle Width="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType=Window},Path=ActualWidth}"
Height="{Binding RelativeSource={RelativeSource FindAncestor,Path=ActualHeight}"
Fill="Gray"
Opacity="0.7" />
<Grid Width="400"
Height="200">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="100" />
</Grid.RowDefinitions>
<Border Grid.RowSpan="2"
Background="LightGray"
BorderBrush="Black"
BorderThickness="1">
<Border.Effect>
<DropShadowEffect BlurRadius="5"
Color="Black"
Opacity="0.6" />
</Border.Effect>
</Border>
<TextBlock Grid.Row="0"
TextWrapping="Wrap"
Margin="30"
Text="I am a modal dialog and my Visibility or Opacity property can be easily modified by a trigger or a nice animation" />
<StackPanel Orientation="Horizontal"
Grid.Row="1"
HorizontalAlignment="Right"
Height="50">
<Button x:Name="OkButton"
Content="Ok"
Width="80" />
<Button x:Name="CancelButton"
Margin="30,30,0"
Content="Cancel"
Width="80" />
</StackPanel>
</Grid>
<Grid.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ExampleDialog"
Storyboard.TargetProperty="Visibility"
Duration="0">
<DiscreteObjectKeyFrame Value="{x:Static Visibility.Hidden}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Grid.Triggers>
</Grid>
放在Grid
中的任何位置,然后切换Window
。它将覆盖父Visibility
并具有模态行为。
将Window
绑定到DataContext
,以便通过ExceptionDialogModel
绑定将数据发送回去。使用命令触发重试过程(例如 OK 或 Retry 按钮)。
TwoWay
可以绑定到Visibility
属性。您可以为该对话框设置动画,并给它任何外观和感觉。
本文链接:https://www.f2er.com/3169988.html