【问题标题】:binding to constant values in mvvm绑定到 mvvm 中的常量值
【发布时间】:2014-10-10 09:34:32
【问题描述】:

我在视图模型中使用了常量值(某些限制),但在我的视图中我也需要它。最好的方法是什么?

常数:

private const int maxLevel = 4;

我真的需要为每个常量创建一个属性并像这样绑定它吗:

private const int _maxLevel = 4;
public int MaxLevel
{
    get { return _maxLevel; }
    set
    {
        RaisePropertyChanged("MaxLevel");
    }
}

也许我可以像使用字符串一样将所有这些值存储在 *.resx 文件中?这里的最佳做法是什么?

【问题讨论】:

    标签: mvvm view binding constants


    【解决方案1】:

    失去二传手。属性更改通知只需要通知绑定元素值已更改。由于 MaxLevel 是一个常数,它的值永远不会改变,因此您不需要它。您不能直接绑定到常量,因为实际上编译器会将值嵌入到在编译时访问它的代码中,因此对于不太可能需要将来修改的常量属性,我通常只做这样的事情:

    public int MaxLevel { get {return 4;} }
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

      namespace Foo.ViewModels
      {
        public class MainWindowViewModel{
          public const int MaxLevel = 4; 
          ...
        }
      }
      

      并在视图中使用它:

      <Label Content="{x:Static Foo.ViewModels:MainWindowViewModel.MaxLevel}"></Label>
      

      或者一般来说,绑定到:

      "{x:Static MyNameSpace:MyClass.MY_CONSTANT}"
      

      【讨论】:

      • 请记住,这不起作用,例如,对于 TextBlock,因为它需要一个字符串,但常量是一个整数。
      猜你喜欢
      • 2011-02-22
      • 2010-11-25
      • 1970-01-01
      • 2016-04-09
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      相关资源
      最近更新 更多