C# WinRT 8.1:如何在调用viewModel上的方法后隐藏弹出按钮

C# WinRT 8.1:如何在调用viewModel上的方法后隐藏弹出按钮,c#,winrt-xaml,caliburn.micro,C#,Winrt Xaml,Caliburn.micro,我的Win 8.1应用程序中有一个弹出按钮,它使用约定在viewModel上调用一个方法。那很好。调用该方法后,如何隐藏/关闭弹出型按钮?使用代码隐藏,它将是f.hide(),但我无法用Caliburn.Micro来理解它 这是我的XAML和ViewModel方法 <Button Content="Add Income / Expense" Margin="35,0,0,0"> <Button.Flyout>

我的Win 8.1应用程序中有一个弹出按钮,它使用约定在viewModel上调用一个方法。那很好。调用该方法后,如何隐藏/关闭弹出型按钮?使用代码隐藏,它将是
f.hide()
,但我无法用Caliburn.Micro来理解它

这是我的XAML和ViewModel方法

<Button Content="Add Income / Expense"  Margin="35,0,0,0">
                <Button.Flyout>
                    <Flyout>
                        <StackPanel>
                            <TextBox Name="LabelToAdd" Header="Enter Label name of income / expense:"/>
                            <StackPanel Orientation="Horizontal">
                                <Button Name="btn_Add" Content="Add"></Button>
                                <Button Name="btn_Cancel" Content="Cancel"></Button>
                            </StackPanel>
                        </StackPanel>
                    </Flyout>
                </Button.Flyout>
            </Button>
非常感谢您的意见,
Martin。

您可以将弹出型visibilite绑定到属性。然后在方法中将其设置为false:

private bool showFlyout;

public bool ShowFlyout
{
    get
    { 
        return showFlyout;
    }
    set
    {
        showFlyout = value; 
        PropertyChanged("ShowFlyout");
    }
}

public void btn_Add()
{
    _income.Add(new Transaction (_labelToAdd,  10.00M, DateTime.Now));
    _labelToAdd = string.Empty;
    NotifyOfPropertyChange(() => LabelToAdd);
    ShowFlyout = false;
}

假定您的类实现了INotifyPropertyChanged接口。此外,btn_Add()不是C#中方法的良好标识符。最好使用PascalCase。

我所做的和它似乎起作用的是在我的弹出视图模型上创建了一个action类型的属性

   public Action CloseFlyout { get; set; }
在调用视图模型时,我将其设置为hide方法

  var regionflyout = new RegionFlyout();
  var vm = regionflyout.DataContext as RegionViewModel;
  vm.CloseFlyout = ()=> regionflyout.Hide();

  regionflyout.ShowIndependent();
最后,在弹出视图模型中,我调用CloseFlyout动作

  this.CloseFlyout.Invoke();

不确定这是一种多么好的方法,但它似乎起了作用。

谢谢您的帮助。弹出按钮似乎不具有可见性。因此我将其绑定到StackPanel可见性,StackPanel确实消失了。但仍然有一个白色的框,一个空的弹出框,留在那里。有什么想法吗?感谢方法命名约定,我修改了我的方法名称。找到了以下链接:它正是我要找的。谢谢你抽出时间。
  this.CloseFlyout.Invoke();