UserControl依赖项属性未更新

时间:2018-03-22 13:47:19

标签: wpf dependency-properties

我创建了各种具有依赖属性的UserControls。当属性发生变化时有些更新而其他属性没有更新,即使我确信我已经正确完成了。 我的视图模型中有一个属性绑定到我的用户控件中的以下属性,如下所示:

<reporting:LegendLabelControl
  Grid.Column="1"
  Grid.Row="3"
  Text="{Binding Path=Item.StatusName, UpdateSourceTrigger=PropertyChanged}"
 UpdateSourceTrigger=PropertyChanged}"/>

“文本”值显示第一次,但后续更新不反映更改。如果我将其交换为TextBlock,TextBlock确实更新它不是属性的问题。 依赖属性如下:

public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
      "Text", typeof (string), typeof (LegendLabelControl), 
      new FrameworkPropertyMetadata(OnTextChanged)
      {
        DefaultUpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
      });

所有相当简单的方法和手动设置用户控件的TextBlock:

public string Text
{
  get { return (string)GetValue(TextProperty); }
  set
  {
    SetValue(TextProperty, value);        
    TxtLabel.Text = value;
  }
}

你会认为这很好,但它只在第一次工作。 现在,我的解决方法是删除依赖项属性setter,以便它认为它没有像这样设置:

public string Text
{
  get { return (string)GetValue(TextProperty); }
  set
  {
    //SetValue(TextProperty, value);
    TxtLabel.Text = value;
  }
}

任何人都可以解释我做错了什么。我一直在和WPF一起工作几年,并掌握了大部分内容,但这只是让我感到困惑。

1 个答案:

答案 0 :(得分:-1)

我注意到你的setvalue

SetValue(TextProperty, value); 

也许这会覆盖你的装订。 请尝试使用绑定模式twoway或setcurrentvalue。

也许是一边。 我会避免使用框架中已存在的属性名称。 当您注册属性名称时,如果它不是唯一的,那么可能会发生不好的事情。 它也更清楚你正在做什么。