2014-09-04 31 views
0

鼠标,如你所知,是一个静态类。它有一个名为Mouse.Position的静态属性。该属性动态更新(绑定到鼠标,也许??)。 (我已阅读msdn中的鼠标文档)如何让更新自己的静态类? (类似于鼠标)

我需要使用此方案构建相同的类。

我正在制作一个应用程序,它能够拥有多个页面,并且每个页面都是共享的,例如Margin的值。

是有2个选项(我认为)做到这一点:

  1. 请在“页面”类中的字段,并通过构造函数传递值(最简单的)
  2. 静态类,类似Mouse.Position使用,但是,在这种情况下,例如,PageInformation.MarginPageInformation是一类,而不是财产,也不是场)

我倾向于第二种选择,因为它更容易调试(我猜),并进行页面一流的清洁程序,无代码,并在更新过程中更轻松如果边缘以某种方式改变了用户..

任何人都知道该怎么做? (mvvm首选)

谢谢。

更新: P.S.我已经了解基本的MVVM的做法(INPC和这样)

这是一般的代码在我的应用至今:

public class ViewModel : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void NotifyPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    ... 
} 

public class SheetPage : ViewModel 
{ 
    ... 
} 
+1

这是一个关于体系结构的问题,还是你想知道如何实现'INotifyPropertyChanged'? - 第一:我不认为将页面边距作为全局变量是一个好主意,为什么这应该更容易调试?全局变量往往会使得理解和调试更加困难 – Carsten 2014-09-04 05:34:46

+0

我认为它更多的是关于架构。 Idk关于全局变量tbh。 “Mouse.Position”也是如此吗? – 2014-09-04 05:36:49

+0

你不知道?即使在鼠标的例子中,如果这是一个很好的面向对象设计的话,你可能会争辩(有点基于观点) - 但至少你曾经在系统中只有一个鼠标指针 - 触摸改变了这一点。 – Carsten 2014-09-04 05:39:17

回答

2

你的类将是一个独立的,并为此几乎不可能进行单元测试。这似乎不是一个非常实际的解决方案。

在WPF中,您可以将所有页面的所有页边距绑定到相同的ViewModel属性。这样,当您的ViewModel属性更改(假设您正确实施了INotifyPropertychanged或使用了DependencyProperty),您的所有边距也会发生变化。

+0

所以,最好通过''Thickness'结构a.k.a'Margin'从'MainWindowVM'传递给'SheetPageVM'呢? – 2014-09-04 05:45:19

+0

@MosesAprico你可以通过你的XAML Binding中的'MainWindowVM'直接访问'Margin',通过查找祖先 – WiiMaxx 2014-09-04 06:51:58

相关问题