У меня проблемы с обновлением списка.Parts od Window.xaml
DataContext="{Binding Link, Source={StaticResource Computer}}">
<Window.Resources>
<CollectionViewSource Source="{Binding GetLinkInfo}" x:Key="compLink">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Grupa" />
<scm:SortDescription PropertyName="Host" />
</CollectionViewSource.SortDescriptions>
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Grupa" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</Window.Resources>
<ListBox x:Name="_lbLink" ItemsSource="{Binding Source={StaticResource compLink}}">
</ListBox>
И Window.xaml.cs
private void InitializedTimers()
{
_timer = new System.Timers.Timer();
_timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
_timer.Interval = 10 * 1000;
_timer.Enabled = true;
}
private void OnTimedEvent(object source, ElapsedEventArgs e)
{
MainViewModelLocator mvm = Application.Current.Resources["Computer"] as MainViewModelLocator;
LinkViewModel lvm = mvm.Link;
if (lvm != null)
{
if ((from t in lvm.GetLinkInfo
where t.State == MRPLink.Link.StateLink.NOTCHECK
select t).Count() > 0)
{
int id = (from t in lvm.GetLinkInfo
where t.State == MRPLink.Link.StateLink.NOTCHECK
select t).First().ID;
lvm.UpdateStatus(id, MRPLink.Link.StateLink.CZECKOK, "xxxx");
}
}
}
Детали ViewModel.cs
public void UpdateStatus(int id, StateLink aState, string aIp)
{
_localinfo.Where(t => t.ID == id).ToList().ForEach(t =>
{
t.State = aState;
if (!String.IsNullOrEmpty(aIp))
{
t.LastIp = aIp;
t.LastSea = DateTime.Now;
}
});
RaisePropertyChanged("GetLinkInfo");
}
Свойства вызывается, но ListBoxне обновляется.
Мне кажется, что это связано с таймером.Но я не знаю, как обойти.
Спасибо за помощь.
ДОБАВЛЕНО
- Я исправляю знак (выберите t) .Count ()> 0) из ==
- Когда я меняю таймер на DispatcherTimer, я получаю доступ к DataContent, но не обновляюсь автоматически.
LinkViewModel lvm = this.DataContext as LinkViewModel;
Я могу использовать _lbLink.Items.Refresh ();после любого изменения: (
ADDED2
После воспроизведения Stave B Я думаю о DispatcherHelper
Я использую его таким образом
Модульное тестирование с MVVM Light & DispatcherHelper
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
lvm.UpdateStatus(id, MRPLink.Link.StateLink.CZECKOK, "xxx");
//_lbLink.Items.Refresh();
});
Но не обновляет порог.
ADDED3:
После этого изменения я вижу, что выполняются свойства GetLinkInfo, но в ListBox не обновляется: (
ДОБАВЛЕНО 4:
После комментария blindmeis Мое приложение исправлено. Спасибо всем за помощь.