gpt4 book ai didi

c# - 标签 MVVM 中显示的 WPF 百分比状态

转载 作者:太空宇宙 更新时间:2023-11-03 23:29:58 25 4
gpt4 key购买 nike

我在 WCF 的 GridView 中显示下载百分比时遇到了一些问题。我使用了 MVVM 模式。

这是我在应用程序启动时的后台 worker :

public partial class MainWindow : Window
{
public MainWindow()
{
Overall.EverythingOk = "Nothing";

InitializeComponent();
//IRepo repo = new Repo();
ViewModel.MainWindowsViewModel viewModel = new ViewModel.MainWindowsViewModel();
this.DataContext = viewModel;
BackGroundThread bgT = new BackGroundThread();
bgT.bgWrk.RunWorkerAsync();
}}

这是BackGroundTHread类中的DoWork函数

 public void bw_DoWork(object sender, DoWorkEventArgs e)
{
if (!Overall.stopStatus)
{
for (int i=0; i < 10000; i++)
{
Overall.PercentageDwnd = i;
Overall.caseRefId = "999999";
if (i == 9998)
{
i = 1;
}
}
}
}

Overall.PercentageDwndOverall.caseRefId 是静态变量(您可以从应用程序的任何地方调用)并且始终更新直到后台工作人员完成。我得到了另一个名为 TestViewModel 的 ViewModel,就在这里。

public class TestViewModel:BindableBase
{
private String _UpdatePer=Overall.PercentageDwnd.ToString();
public String UpdatePercentage
{
get { return _UpdatePer; }
set { SetProperty(ref _UpdatePer, value); }
}

private ObservableCollection _ViewAKA = new ObservableCollection();
private tblTransaction model;

public TestViewModel(tblTransaction model)
{
// TODO: Complete member initialization

}
public ObservableCollection ViewAKA
{
get { return _ViewAKA; }
set { SetProperty(ref _ViewAKA, value); }
}
}

我绑定(bind)了 TestView.xaml 文件

    <Window x:Class="EmployeeManager.View.TestView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TestView" Height="359.774" Width="542.481">
<Grid Margin="0,0,2,0">
<Label Content="{Binding UpdatePercentage,UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Background="Red" Foreground="White" Margin="130,86,0,0" VerticalAlignment="Top" Width="132" Height="39">
</Label>
</Grid>
</Window>

Label 没有实时更新,即使我将 UpdatePercentage 绑定(bind)到它。如何实时更新标签?

最佳答案

问题在于您正在更新未绑定(bind)任何内容的静态属性。您需要为绑定(bind)到标签控件的属性更新和引发属性更改通知,即 UpdatePercentage

能否将 TestViewModel 实例传递到 RunWorkerAsync 调用中?

bgT.bgWrk.RunWorkerAsync(testViewModel);

然后在DoWork事件处理器中访问:

public void bw_DoWork(object sender, DoWorkEventArgs e)
{
if (!Overall.stopStatus)
{
var viewModel = e.Argument as TestViewModel;
for (int i=0; i < 10000; i++)
{
Overall.PercentageDwnd = i;
viewModel.UpdatePercentage = i;
Overall.caseRefId = "999999";
if (i == 9998)
{
i = 1;
}
}
}
}

关于c# - 标签 MVVM 中显示的 WPF 百分比状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32666205/

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