如何从ViewModel创建和显示弹出窗口

3

首先,如果问题看起来很简单,我应该道歉,因为我对WPF和MVVM都很陌生,我真的不知道如何完成这项工作。

我需要在ViewModel中显示弹出窗口。我知道可以在viewModel中创建一个布尔属性,并将其绑定到Popup的IsOpen属性,但我不知道应该在哪里创建这个弹出窗口。

我有一些视图,每个视图都必须根据不同的情况显示某些弹出消息。现在我需要知道是否应该在每个视图中创建几个弹出窗口,并将它们的IsOpen属性与ViewModel中的属性绑定,或者是否有更好的解决方案。如果我应该在视图中创建它们,那么应该把它们放在哪里?是在网格中,在StackPanel中还是其他任何地方。

如果我没有表达清楚,请告诉我。感谢任何帮助。

2个回答

1
我通常会使用第三方对象来控制我的弹出框和对话框,比如Caliburn的WindowManager。 WindowManager 它以ViewModel作为内容并在弹出框中显示相应的View。
您可以做类似的事情,并将ViewModel的内容绑定到弹出框或对话框。
例如,这是一个我为此目的创建的自定义操作: OpenPopupWindowAction

0

这是一个示例弹出窗口。参考

基本弹出窗口MSDN概述

<StackPanel>
<CheckBox Name="PCheckBox" Margin="10,10,0,0"
      Content="Popup Window"/>
<Button HorizontalAlignment="Left" Width="129" Margin="10,10,0,0">
    <Button.Triggers>
        <EventTrigger RoutedEvent="Button.Click">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation
        Storyboard.TargetName="theTransform"
        Storyboard.TargetProperty="(RotateTransform.Angle)"
        From="0" To="360" Duration="0:0:5" AutoReverse="True"/>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Button.Triggers>
    Start Animation
</Button>
<Popup  IsOpen="{Binding ElementName=PCheckBox,Path=IsChecked}"
   PlacementTarget="{Binding ElementName=PCheckBox}"           
   AllowsTransparency="True"
   PopupAnimation="Slide"
   HorizontalOffset="150"
   VerticalOffset="100"
   >

    <Canvas Width="100" Height="100" Background="Green" Margin="150">
        <Canvas.RenderTransform>
            <RotateTransform x:Name="theTransform" />
        </Canvas.RenderTransform>
        <TextBlock TextWrapping="Wrap" Foreground="LightGray">
  Rotating Popup
</TextBlock>
    </Canvas>
</Popup>

 private void OnPopupLoaded(object sender, RoutedEventArgs e)
    {
        this.ParentPopup.HorizontalOffset = (Window.Current.Bounds.Width - gdChild.ActualWidth) / 2;
        this.ParentPopup.VerticalOffset = (Window.Current.Bounds.Height - gdChild.ActualHeight) / 2;
    }

很好。请问我应该如何将它显示在屏幕中央? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接