gpt4 book ai didi

c# - WPF MVVM 短时间显示标签文本

转载 作者:行者123 更新时间:2023-12-03 11:01:38 24 4
gpt4 key购买 nike

我有一个 Label在我向用户显示消息的 View 中的状态栏中。我只想显示消息并更改背景颜色几秒钟,这样我就不必使用额外的代码行来清除标签。

我有一个 StatusTextStatusColor viewmodel 中的属性,标签内容和颜色绑定(bind)到这些,并且工作正常。

我的问题是如何在 ViewModel 中计时?

我可以在 viewmodel 方法中使用计时器,并且在显示消息时不会卡住 UI 吗?

我正在尝试遵守 MVVM 框架,但在不使用事件的情况下我无法在 SO 上找到任何解决方案。有可能以某种简单的方式吗?

最佳答案

使用命令而不是事件。 Command 将在 ViewModel 中找到名称匹配的 ICommand 属性。这将使您的 View 和代码隐藏分离。

在xml中

<Button Command="ChangeColorCommand" />

在 View 模型中
笔记:
timerSystem.Timers.Timer .我跳过了它的实例化代码。
TimerTickedtimer 时调用过去。

您不必使用 DispatcherTimer因为 StatusTextStatusColor不是 UI 对象。
    public ICommand ChangeColorCommand
{
get
{
return new RelayCommand( ChangeColorAndMessage );
}
}
// This is your view model constructor
private void ViewModelCtor(){
// your initialize code here

//subscribe event once
timer = new Timer();
timer.Interval=1000;
timer.AutoReset=false;
timer.Elapsed += TimerTicked;
}

public void ChangeColorAndMessage( string[] args )
{
StatusText = "Button pressed";
StatusColor = changedColor;

// You implementation for changing it back.
timer.Enabled = true;
}

private void TimerTicked( object sender, EventArgs e )
{
StatusText = "origin";
StatusColor = originColor;

// Fire property changed to notify view updating data.
PropertyChanged( this, new PropertyChangedEventArgs( StatusText ) );
PropertyChanged( this, new PropertyChangedEventArgs( StatusColor ) );
}

RelayCommand的实现,引用这个 post

关于c# - WPF MVVM 短时间显示标签文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60383703/

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