Mvvm 如何控制ViewModel中的UWP弹出按钮?

Mvvm 如何控制ViewModel中的UWP弹出按钮?,mvvm,uwp,viewmodel,template10,flyout,Mvvm,Uwp,Viewmodel,Template10,Flyout,我想打开和关闭viewmodel中的弹出按钮 Im使用UWP和Template10。我打算使用Template10和Template10 我创建了一个存储打开或关闭状态的bool属性。不知道如何在这里调用OpenFlyoutAction bool _IsFlyoutOpen = default(bool); public bool IsFlyoutOpen { get { return _IsFlyoutOpen; } set

我想打开和关闭viewmodel中的弹出按钮

Im使用UWP和Template10。我打算使用Template10和Template10

我创建了一个存储打开或关闭状态的bool属性。不知道如何在这里调用OpenFlyoutAction

    bool _IsFlyoutOpen = default(bool);
    public bool IsFlyoutOpen
    {
        get { return _IsFlyoutOpen; }
        set
        {
            var ofa = new OpenFlyoutAction();
            if (_IsFlyoutOpen)
            {
                // what should i call here to open flyout
            }
            else
            {
                // what should i call here to close flyout
            }
            Set(ref _IsFlyoutOpen, value);
        }
    }
我创建了2个命令,通过更改字段来打开和关闭弹出型按钮

    DelegateCommand _CloseFlyout;
    public DelegateCommand CloseFlyout
       => _CloseFlyout ?? (_CloseFlyout = new DelegateCommand(() =>
       {
           _IsFlyoutOpen = false;
       }, () => true));


    DelegateCommand _OpenFlyout;
    public DelegateCommand OpenFlyout
       => _OpenFlyout ?? (_OpenFlyout = new DelegateCommand(() =>
       {
           _IsFlyoutOpen = true;
       }, () => true));
在xaml中,我使用DataTriggerBehavior监视IsFlyoutOpen属性并相应地采取行动。不确定这是不是正确的方法

        <Button Content="Open flyout" Command="{x:Bind ViewModel.OpenFlyout}">
            <FlyoutBase.AttachedFlyout>
                <Flyout Placement="Full">
                    <StackPanel>
                        <TextBlock Text="Awesome Flyout!" />
                        <Button Content="Close flyout" Command="{x:Bind ViewModel.CloseFlyout}"/>
                    </StackPanel>
                </Flyout>
            </FlyoutBase.AttachedFlyout>
            <Interactivity:Interaction.Behaviors>
                <Core:DataTriggerBehavior Binding="{x:Bind ViewModel.IsFlyoutOpen}" ComparisonCondition="Equal" Value="True">
                    <Behaviors:OpenFlyoutAction />
                </Core:DataTriggerBehavior>

                <Core:DataTriggerBehavior Binding="{x:Bind ViewModel.IsFlyoutOpen}" ComparisonCondition="Equal" Value="False">
                    <Behaviors:CloseFlyoutAction />
                </Core:DataTriggerBehavior>
            </Interactivity:Interaction.Behaviors>
        </Button>


完整的源代码可以在这里

我想这就是你要找的

<Button Content="Open flyout">
  <FlyoutBase.AttachedFlyout>
    <Flyout>
      <StackPanel>
                    <TextBlock Text="Something Useful" />
                    <Button Content="Close">
                        <!-- Call CloseFlyoutAction -->
                    </Button>
      </StackPanel>
     </Flyout>
 </FlyoutBase.AttachedFlyout>
 <Interactivity:Interaction.Behaviors>
    <Core:EventTriggerBehavior EventName="Tapped">
        <Behaviors:OpenFlyoutAction />
    </Core:EventTriggerBehavior>
 </Interactivity:Interaction.Behaviors>
 </Button>

开放式弹出动作

闭合弹出动作


您还可以抛出一个
条件动作
,指示在调用
CloseFlyoutAction
之前必须满足一个条件。这一切都在wiki上,几乎所有的实际代码都包含在XAML中。

您想什么时候打开弹出按钮?你能告诉我用户的行为吗?