【问题标题】:WPF Change property of an object (that is a dependency property) in usercontrolWPF 在用户控件中更改对象的属性(即依赖属性)
【发布时间】:2018-12-07 13:56:32
【问题描述】:

我有课

   class Export{
      TimeSpan SlowDownPosition{get; set;}
    }

现在这个类是我的用户控件的依赖属性。并且SlowDownPosition 绑定到一个TextBlock。我有一个按钮可以将值重置为zero。但这样做不会更新 UI,因为 SlowDownPosition 是依赖属性的一个属性。

<TextBlock Text="{Binding ElementName=TagMetaDataControl,Path=Export.SlowDownPosition}" />
<Button Content="X" Click="ResetAutoSlowPosition" />

关于背后的代码

private void ResetAutoSlowPosition(object sender, RoutedEventArgs e)
    {
        Export.SlowDownPosition = TimeSpan.Zero;
    }

有没有办法在不使SlowDownPosition 本身成为依赖属性的情况下更新 UI?

【问题讨论】:

  • 你使用了 [inotifypropertychanged] 标签,所以你知道它,但你没有在 Export 类中实现它。为什么?
  • @ASh 因为它是一个数据模型;在用户控件上实现它似乎不是正确的方法
  • 当不直接将控件绑定到数据模型时。介绍一个实现 INPC 的视图模型
  • @ASh yah 这就是我可能会采用的方法,这是一个非常简单的控件,我想我可以在没有任何视图模型的情况下做到这一点
  • “有没有办法在不使 SlowDownPosition 本身成为依赖属性的情况下更新 UI?”当然,只需让 Export 实现 INotifyPropertChanged 并在 SlowDownPosition 更改时触发 PropertyChanged 事件。然后将触发与Export.SlowDownPosition 的绑定,并且 UI 会神奇地更新。

标签: c# wpf dependency-properties inotifypropertychanged


【解决方案1】:

您可以强制刷新绑定。

XAML:

<TextBlock x:Name="MyTextBlock" Text="{Binding ElementName=TagMetaDataControl,Path=Export.SlowDownPosition}" />

代码背后:

private void ResetAutoSlowPosition(object sender, RoutedEventArgs e)
{
    Export.SlowDownPosition = TimeSpan.Zero;
    MyTextBlock.GetBindingExpression(TextBlock.TextProperty).UpdateTarget();
}

【讨论】:

  • 有趣的方法我试试看
  • @SZTthis 应该被标记为接受的答案。我完全忘记了这种更新绑定目标的方式。我将删除我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多