嗨我想从不同的类控制.isopen值,我花了好几个小时调查这个,我尝试了各种各样的,除了一个我不太了解的视图模型,但只是看起来过度改变一个价值,如果有人能指出我正确的方向,那就太棒了。感谢
答案 0 :(得分:1)
对于除最简单应用之外的任何内容,您可能应该考虑将数据与演示文稿分开。对于小型应用程序,您不一定需要完整MVVM的复杂性,但一般概念几乎总是好的。
也就是说,另一种选择是将您的MainPage编写为单例并导出一个静态函数,该函数提供MainPage实例并可以从其他应用程序调用。标准MSDN示例模板使用公共Curren字段
执行此操作public sealed partial class MainPage : Page
{
public static MainPage Current;
public MainPage()
{
this.InitializeComponent();
SampleTitle.Text = FEATURE_NAME;
// This is a static public property that allows downstream pages to get a handle to the MainPage instance
// in order to call methods that are in this class.
Current = this;
}
// Rest of MainPage class
}
其他类可以通过Current字段从MainPage类访问公共方法和字段:
MainPage.Current.MyPopup.IsOpen = true;
对于封装,您可能希望将其包装在函数中而不是直接暴露MyPopup
public void RequestWidgetData()
{
WidgetPopup.IsOpen = true;
}
答案 1 :(得分:0)
使用viewmodel是正确的决定。在viewmodel中,您将创建一个属性IsOpen,然后将您的视图绑定到它。我强烈建议你在为WinRT设计app时使用MVVM模式。简单的实现将是这样的:
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
protected virtual void OnPropertyChanged(PropertyChangedEventArgs args)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, args);
}
}
public class MainPageViewModel : ViewModelBase
{
private bool _isOpen;
public bool IsOpen
{
get { return _isOpen; }
set
{
_isOpen = value;
OnProperyChanged("IsOpen");
}
}
}