gpt4 book ai didi

c# - 有没有一种好方法将 xaml 绑定(bind)到依赖于多个其他属性的属性?

转载 作者:行者123 更新时间:2023-12-02 14:13:58 26 4
gpt4 key购买 nike

在我的一个 WPF 项目中,我在 XAML 中创建了一个动画 Storyboard,其中的计时属性可以在启动动画之前动态更改。由于我需要一种方法来更改代码中的值,因此我将它们绑定(bind)到类的属性。

基本思想是动画有两个阶段,在 Storyboard 中我使用 ObjectAnimationUsingKeyFrames 来占用总动画时间,因此我具有如下属性:

public TimeSpan RaiseTime { get; set }

public TimeSpan FallTime { get; set; }

public TimeSpan TotalTime
{
get { return RaiseTime + FallTime; }
}

首次创建动画时,它会正确从这些属性获取值,但由于它们可以动态更改,因此我需要一种方法来通知 XAML 值已更改。

将 RaiseTime 和 FallTime 转换为 DependencyProperty 非常容易,以便它们的更改将反射(reflect)在 XAML 绑定(bind)中,但是 TotalTime 又如何呢?它本身没有值,所以我无法将它变成 DP。

昨天,我花了几个小时搜索/尝试随机的东西来尝试让它工作,并最终使用 MultiBinding 到 RaiseTime 和 FallTime 以及 IMultiValueConverter 来工作,这要归功于一些 SO 问题和博客文章: Bind an element to two sources http://blog.wpfwonderland.com/2010/04/15/simplify-your-binding-converter-with-a-custom-markup-extension/

我的问题是:这真的是最好的方法吗?这似乎(至少对我来说)是一个简单的任务,但它需要大量(大部分是样板文件)代码才能工作。我认为一定有一种更简单、更简洁的方法来绑定(bind) TotalTime 并将更新推送到 XAML,但我还没有找到一种方法。真的存在吗,还是我只是在做梦?

最佳答案

您绝对可以使用 INotifyPropertyChanged 使其工作,然后简单地绑定(bind)到该类。

代码看起来像这样:(未经测试的代码)

public class PleaseChangeTheNameOfThisClass : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

public void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}

private TimeSpan _raiseTime;
public TimeSpan RaiseTime
{
get { return _raiseTime; }
set
{
if (_raiseTime != value)
{
_fallTime = value;
RaisePropertyChanged("RaiseTime");
RaisePropertyChanged("TotalTime");
}
}
}

private TimeSpan _fallTime;
public TimeSpan FallTime
{
get { return _fallTime; }
set
{
if (_fallTime != value)
{
_fallTime = value;
RaisePropertyChanged("FallTime");
RaisePropertyChanged("TotalTime");
}
}
}

public TimeSpan TotalTime
{
get { return RaiseTime + FallTime; }
}
}

关于c# - 有没有一种好方法将 xaml 绑定(bind)到依赖于多个其他属性的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14264120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com