【问题标题】:C# Send Data Notifications through another project solution (Binding)C# 通过另一个项目解决方案发送数据通知(绑定)
【发布时间】:2014-09-23 14:50:51
【问题描述】:

我有 2 个项目,一个包含我的模型,另一个包含我的视图(Windows 窗体)。 我试图刷新我的视图,特别是 Label 在我使用绑定的 build() 方法期间根据模型更改,但这不起作用。我不知道我的代码是错误的还是不可能的。

编辑:实际上,标签似乎需要 Update() 或 Refresh() 调用 才能在他的窗口中以图形方式更新...这可以解释我的问题

有我的模型类:

// ModelBuilder : INotifyPropertyChanged 

public event PropertyChangedEventHandler PropertyChanged;
private Substation currentSubstation;

public Substation CurrentSubstation
{
   get
   {
       return this.currentSubstation;
   }
   set
   {
       if (value != this.currentSubstation)
       {
           this.currentSubstation = value;
           NotifyPropertyChanged("CurrentSubstation");
        }
    }
}

private void NotifyPropertyChanged(String propertyName)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

 public void Build()
 {
     foreach (Uri substationUri in substationsUri)
     {                 
         Substation substation = new Substation(substationUri); // long process
         this.CurrentSubstation = substation;
     } 
 }

有我的看法

private void StartImportation_Click(object sender, EventArgs e)
{
   this.model = new ModelBuilder(); 
   // Old mistake: 
   //this.timeLabel.DataBindings.Add(new Binding("Text", this.model.CurrentSubstation,"name")); 
   this.timeLabel.DataBindings.Add(new Binding("Text", this.model, "CurrentSubstation.name")); 
   this.model.Build(); //  I'd like to see the current substation created name
}

【问题讨论】:

  • CurrentSubstation 属性中,在 set 部分中,您需要像这样在函数中将属性名称作为参数传递 - NotifyPropertyChanged("当前变电站")
  • @KrishnrajRana 它仍然不起作用,但即使没有这个参数,我的代码也进入了 NotifyPropertyChanged 函数。我用断点检查了它。
  • 它执行您的 NotifyPropertyChanged() 函数,因为您使用了可选参数。所以它永远不会抛出任何错误,因为它只是在函数内部传递空白字符串。所以你永远不会在目的地收到任何通知。
  • 好吧,我会让你告诉我的。所以现在,我有了 NotifyPropertyChanged("CurrentSubstation");但仍然无法正常工作:/

标签: c# forms binding refresh


【解决方案1】:

原因是您绑定到初始的this.model.CurrentSubstation,但是当您Build() 时,ModelBuilder 被分配了一个新的Substation。然而,旧的CurrentSubstation 在此过程中从未改变。

new Binding("Text", this.model.CurrentSubstation, "name")

将绑定更改为

new Binding("Text", this.model, "CurrentSubstation.name")

【讨论】:

  • @RedtheoneTowedance 抱歉,我以为是 WPF。我改变了答案。
  • Ohhhh 是的,解决了我的progressBar 问题(相同类型的没有属性的绑定)=> this.progressBar.DataBindings.Add(new Binding("Value", this.model, "SubstationCount"));没问题但是标签仍然没有刷新,但我正在努力。我希望它会在几分钟内好起来
  • 嗯,奇怪的是,看起来标签需要手动 Update() 才能正确显示。你听说过吗?
  • 在分配了CurrentSubstation 之后,name 会发生变化吗?如果是这种情况,Substation 也需要实现 INPC。
  • 不,变电站的名称永远不会改变。它只是在创建时分配的。问题来自我认为的 Update() 非调用:手动修改标签文本不会更新它,但没有 Refresh() 或 Update() 调用方法。目前,标签只取第一个值并且永远不会更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多