绑定是否适用于未实现Inotifypropertychanged的源属性?

时间:2013-09-10 20:54:16

标签: c# wpf xaml

我有一个实现Inotifypropertychanged的类。我也有这个属性,我注释了通知。

private Color _CoolColor =Colors.Purple;
    public Color CoolColor
    {
      get
      {
        return _CoolColor;
      }
      set
      {
        if (value != _CoolColor)
        {
          _CoolColor = (Color)value;
          //OnPropertyChanged("CoolColor");
        }
      }
    }

我的xaml中的绑定附加到此属性:

BusTextColor="{Binding Path=CoolColor}"

 /// <summary>
    /// Color used for the text containing the hex value of the bus
    /// </summary>
    public Color BusTextColor
    {
      get
      {
        return (Color)GetValue(BusTextColorProperty);
      }
      set
      {
        SetValue(BusTextColorProperty, value);
      }
    }
    public static readonly DependencyProperty BusTextColorProperty =
      DependencyProperty.Register("BusTextColor",
      typeof(Color), typeof(SignalGraph),
      new FrameworkPropertyMetadata(new Color(), new PropertyChangedCallback(CreateBrushesAndReDraw)));

我只限制了这个原因我想确保我没有疯狂,但我必须疯狂,因为当CoolColor改变时我的BusTextColor正在更新。有人请让它停止工作。

我只是这样做,因为我拥有的另一个依赖属性没有正确绑定到我的viewmodel。我知道可能有一些明显的原因,但我肯定错过了它。

编辑: 那篇文章很有意思。但在我的情况下,我实现了Inotifypropertychanged接口,我只是不提高事件OnPropertyChanged。我意识到我也应该发布它。

protected void OnPropertyChanged(string name)
{
  PropertyChangedEventHandler handler = PropertyChanged;
  if (handler != null)
  {
    handler(this, new PropertyChangedEventArgs(name));
  }
}

2 个答案:

答案 0 :(得分:1)

  

有人请让它停止工作。

只需将BindingMode设置为OneTime

即可

答案 1 :(得分:0)

由于没有人有明显的答案,我知道我在其他地方做错了什么,我发布的内容应该有效。

最终意识到这是我之前遇到过的一个错误。某处我手动更改了目标的值并打破了绑定。在这些情况下需要开始检查代码干扰绑定,而不是假设我在xaml中使用不正确的绑定语法