C# 在几毫秒内更新CLR属性的绑定WPF

C# 在几毫秒内更新CLR属性的绑定WPF,c#,.net,wpf,mvvm,timer,C#,.net,Wpf,Mvvm,Timer,我正在开发一个WPF应用程序,在这个应用程序中,我必须显示一个控件80毫秒,然后隐藏 有16个控件及其各自的viewmodel,每个viewmodel中都有一个计时器(System.Timers.timer)和CLR属性,该属性绑定到控件的Visibility 当一个值大于0并将CLR属性设置为可见时,计时器启动,并且在80毫秒后触发已用事件,在此期间将属性设置为折叠 在下面的代码中,Method1()在400毫秒后调用 例如: public class ExampleViewModel : V

我正在开发一个WPF应用程序,在这个应用程序中,我必须显示一个控件80毫秒,然后隐藏

有16个控件及其各自的viewmodel,每个viewmodel中都有一个计时器(System.Timers.timer)和CLR属性,该属性绑定到控件的Visibility

当一个值大于0并将CLR属性设置为可见时,计时器启动,并且在80毫秒后触发已用事件,在此期间将属性设置为折叠

在下面的代码中,Method1()在400毫秒后调用

例如:

public class ExampleViewModel : ViewModelBase
{
    Timer timer;
    private Visibility _isVisibile = Visibility.Collapsed;
    public Visibility IsVisibile
    {
        get { return _isVisibile; }
        set { SetField(ref _isVisibile, value, () => IsVisibile); }
    }

    public ExampleViewModel()
    {
        timer = new Timer();
        timer.Interval = 80;
        timer.Elapsed += Timer_Elapsed;
    }

    private void Timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        IsVisibile = Visibility.Collapsed;
        timer.Stop();            
    }

    public void Method1(int value)
    {
        if (value > 0)
        {
            IsVisibile = Visibility.Visible;
            timer.Start();
        }
    }
}
IsVisible的属性更改事件每次都会触发,但如果有2个以上的控件,则它不会在80毫秒内反映在UI上

更新控件的可见性绑定需要多长时间? 如何在几毫秒内更新绑定以使其能够与所有16个控件并行工作


提前谢谢

有趣的问题。我不知道答案,但我怀疑这有点像‘很复杂’。在开始讨论绑定更新之前,您需要知道
计时器的最大分辨率是多少。我很难找到一个准确的答案(我怀疑答案是‘很复杂’),但在浏览了半打博客和回复后,看起来可能在15到50毫秒之间。因此,在更新
可见性
属性之前,您已经远远超出了“几毫秒”的限制。如果我错了,请纠正我,但我的印象是,您正在尝试为某种动画同步这些对象。如果是这种情况,那么使用16个视图模型和相应的视图可能不是一种好办法。你能将所有这些逻辑封装在一个控件中吗?你不应该在这里使用
计时器
,因为它的
运行时间
处理程序没有在UI线程中运行,因此你必须调用
调度程序。调用
来调用UI线程中的处理程序代码。改用
调度程序。它的
Tick
处理程序在UI线程中运行。WPF绑定引擎无法保证任何计时。它由一个
调度程序驱动,该调度程序根据用户界面线程上的操作优先级对其进行排队。但是,绑定优先级不是最高的。TL;DR:如果您有严格的计时要求,请不要使用WPF绑定。如果它是从viewmodel依赖项绑定控制的,我看不出这可能达到您明确要求的精度级别。查看视图中的动画,使默认状态为“折叠”,然后在进入动画情节提要时将其设置为可见,然后在80ms后恢复。我想这是你能得到的最好的了。