C# 在几毫秒内更新CLR属性的绑定WPF
我正在开发一个WPF应用程序,在这个应用程序中,我必须显示一个控件80毫秒,然后隐藏 有16个控件及其各自的viewmodel,每个viewmodel中都有一个计时器(System.Timers.timer)和CLR属性,该属性绑定到控件的Visibility 当一个值大于0并将CLR属性设置为可见时,计时器启动,并且在80毫秒后触发已用事件,在此期间将属性设置为折叠 在下面的代码中,Method1()在400毫秒后调用 例如: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
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后恢复。我想这是你能得到的最好的了。