我目前正在尝试通过backgroundworker类更新我的UI中的文本框。这个后台工作者在我的解决方案的ViewModel部分中,它只在我的应用程序接收数据时发生(在我的模型上作为事件触发)。
我在我的MainWindow xaml文件中使用了绑定来将文本绑定到我的ViewModel中的属性,并且当设置了断点时,它似乎存储了正确的值,即使它们仍未显示。
我不太确定DoWork事件和事件之间的分歧。 RunWorkerCompleted事件。我有DoWork事件将数据包设置为收到的最新数据包,并在完成时(RunWorkerCompleted),我将值分配给在ViewModel中创建的属性。我是否正确实现了backgroundworker类?
对此有任何帮助将非常感激。
<TextBox Height="23" HorizontalAlignment="Left" Margin="577,70,0,0" Name="receiveVariableValueBox" VerticalAlignment="Top" Width="120" Text="{Binding Path=RxVariableValue}"/>
public class DataPointsViewModel : INotifyPropertyChanged
{
public Model model;
BackgroundWorker receiveBackground;
RRTDataPacket rxDataPacket = new RRTDataPacket();
private int rxVariableValue;
public int RxVariableValue
{
get { return rxVariableValue; }
set
{
if(rxVariableValue != value)
{
rxVariableValue = value;
OnPropertyChanged(rxMajorVersion.ToString());
}
}
}
public void receivingUpdater(object sender, EventArgs e)
{
receiveBackground = new BackgroundWorker();
receiveBackground.DoWork += new DoWorkEventHandler(receiveBackground_DoWork);
receiveBackground.RunWorkerCompleted += new RunWorkerCompletedEventHandler(receiveBackground_RunWorkerCompleted);
receiveBackground.RunWorkerAsync();
}
public void receiveBackground_DoWork(object sender, DoWorkEventArgs e)
{
try
{
if (rxDataPacket != Engine.latestRxDataPacket)
{
rxDataPacket = Engine.latestRxDataPacket;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
public void receiveBackground_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if(rxDataPacket != null)
{
RxMajorVersion = (int)rxDataPacket.majorVersion;
RxVariableValue = (int)rxDataPacket.variableValue;
}
}
答案 0 :(得分:1)
您的OnPropertyChanged错误
public int RxVariableValue
{
get { return rxVariableValue; }
set
{
if(rxVariableValue != value)
{
rxVariableValue = value;
OnPropertyChanged("RxVariableValue");
}
}
}
答案 1 :(得分:0)
尝试调用OnPropertyChanged(&#34; RxVariableValue&#34;);在RxVariableValue的setter中