【问题标题】:How I can bind property, which use another static property我如何绑定使用另一个静态属性的属性
【发布时间】:2015-04-04 13:50:05
【问题描述】:

我在我的 progeсt (C#) 中使用 mvvm 模式,但我遇到了一些问题。 我的视图上有一个标签,标签的文本绑定到我的 viewModel 的属性:

val label=new Label();
label.SetBinding<StatusViewModel>(Label.TextProperty, x=>x.TextProp);

这是我的视图模型,它实现了 INotifyPropertyChanged 接口:

class StatusViewModel
{
private string _textProp;
public string TextProp
{
   get
   {
      return _textProp;
   }
   set
   {
      if(_textProp == value)
        return _textProp;

      _textProp=value;
      OnPropertyChange();
   }
}
}

但我还有另一个静态属性:

static class StaticClass
{
public static string StaticText {get; set; }
}

我想在 StatusViewModel 的 TextProp 属性中使用这个静态属性 StaticText。并且 StaticText 属性桅杆通知标签它发生了变化。

附:抱歉可能出现的错误,我是从脑海中输入这段代码的。

【问题讨论】:

  • 你在 setter 中有一个 return 语句。

标签: c# mvvm binding inotifypropertychanged


【解决方案1】:

如果你绑定到static 属性,你可能做错了:)

也就是说,初始绑定非常简单。您只需要添加一个返回static 的属性:

public string StaticTextRedirect
{
   get { return StaticClass.StaticText; }
   set { StaticClass.StaticText = value; }
}

PropertyChanged 事件是另一种野兽。当然,您可以从StaticTextRedirect 属性中提出它,但是如果某些 other 类更改了该属性,则不会触发。您可能只需要在静态属性的 setter 中引发客户端代码可以侦听的自定义事件并引发适当的 PropertyChanged 事件。

【讨论】:

  • 我也尝试从 INotifyPropertyChanged 接口扩展 StaticClass,但我不能在静态属性中使用 OnPropertyChange(我认为这不是你所说的)。你能举个例子吗?
  • @Brian 无论如何都行不通,静态类不是您的数据上下文,也不是静态属性的上下文。您需要引发 VM 侦听的 custom 事件(您自己的),然后引发它自己的PropertyChanged。那有意义吗?如果这听起来很麻烦,那就是。你不应该绑定到静态属性:)
  • 那么,如果在 StaticClass 中创建自己的事件并在 StaticText 的 setter 中引发它,然后在 StatusViewModel 中订阅此事件并在事件引发时执行 OnPropertyChange("TextProp"),它会起作用吗?跨度>
  • 在我的示例中,它将是OnPropertyChange("StaticTextRedirect"),但除此之外。是的,应该可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 2010-10-30
  • 2021-08-22
  • 2018-04-01
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多