添加时C#WPF listView未实时更新
我将listView绑定到一个类:添加时C#WPF listView未实时更新,c#,wpf,listview,binding,C#,Wpf,Listview,Binding,我将listView绑定到一个类: <ListView x:Name="lvInfo" HorizontalAlignment="Left" Height="277" Margin="23,63,0,0" VerticalAlignment="Top" Width="750"> <ListView.View> <GridView> <GridViewColumn Header="#
<ListView x:Name="lvInfo" HorizontalAlignment="Left" Height="277" Margin="23,63,0,0" VerticalAlignment="Top" Width="750">
<ListView.View>
<GridView>
<GridViewColumn Header="#" Width="20" DisplayMemberBinding="{Binding execNumber}"/>
<GridViewColumn Header="Function" Width="120" DisplayMemberBinding="{Binding currentFunction}"/>
<GridViewColumn Header="Message" Width="300" DisplayMemberBinding="{Binding pcdMessage}"/>
<GridViewColumn Header="Event Type" Width="75" DisplayMemberBinding="{Binding pcdEventType}"/>
<GridViewColumn Header="Event" Width="150" DisplayMemberBinding="{Binding pcdEvent}"/>
<GridViewColumn Header="Timing" Width="50" DisplayMemberBinding="{Binding strTime}"/>
</GridView>
</ListView.View>
</ListView>
该类通过事件更新:
private void MyPcd_OnStatusChange(string _currentFunction, string _PCDMessage, Helper.ePcdEventType _pcdEventType, Helper.ePcdEvent _pcdEvent)
{
String strTime;
if (lastTime == default(DateTime))
strTime = "---";
else
{
TimeSpan ts = DateTime.Now - lastTime;
strTime = ts.TotalSeconds.ToString("0.000")+ "\"";
}
lastTime = DateTime.Now;
PcdStatus newStatus = new PcdStatus(execNumber, _currentFunction, _PCDMessage, _pcdEventType, _pcdEvent, strTime);
Application.Current.Dispatcher.BeginInvoke(new Action(() => this.ocList.Add(newStatus)));
//ocList.Add(newStatus);
}
类更新已正确完成,但不是实时更新。我添加了一个console.Beep(),它在库中触发事件时向我发出警告。因此,库中的事件-->My_PcdOnStatusChange-->ocList.Add-->listView已更新。
我希望每次哔哔声都有更新,但listView只在所有s/r结束时更新
编辑很抱歉忘记提及以下ocList代表:
ObservableCollection<PcdStatus> ocList = new ObservableCollection<PcdStatus>();
预期的行为是:
idle --> green
started ---> red
terminated ---> green
idle ---> green
started --->green
midway ---> red
terminated --->green.
虽然其行为是:
idle --> green
started ---> red
terminated ---> green
idle ---> green
started --->green
midway ---> red
terminated --->green.
我是winforms中WPF的新手,有一个Mainform.Update。这里有类似的东西吗
谢谢你的帮助
Patrick您需要将ItemSource属性绑定到实现 其中最简单的是
如果希望更新属性更改,则还应实现PcdStatus调度程序不保证何时调用您的操作。此外,您甚至没有指定一个。尝试将优先级设置为
Send
,看看是否有帮助。仅供参考,它永远不会是完美的,因为消息循环永远不能以任何接近“实时”的方式处理UI事件。ocList可能是一个可观察的集合,但您的代码没有显示任何与它的绑定,您在哪里设置ListView。ItemSource={binding ocList}?BeginInvoke
是异步的。对同步调度程序调用使用Invoke
。@Clemens请查看我的编辑2我使用Invoke,但这并没有“改变”。@MikeT抱歉我的错,我有它lvInfo.ItemsSource=ocList;但是请看我的编辑2