访问Popup.is在主页上打开来自不同的类

时间:2014-12-06 14:45:44

标签: c# windows-phone-7 windows-phone-8 windows-phone-8.1

嗨我想从不同的类控制.isopen值,我花了好几个小时调查这个,我尝试了各种各样的,除了一个我不太了解的视图模型,但只是看起来过度改变一个价值,如果有人能指出我正确的方向,那就太棒了。感谢

2 个答案:

答案 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");
        }
    }
}