c# - ObservableCollection 不更新项目源

标签 c# wpf data-binding mvvm mvvm-light

我有一个从网络线程填充的可观察集合。如果使用虚拟数据从构造函数填充 OC,它会显示在 UI 上。我知道项目正在从网络线程添加到集合中,但项目计数永远不会在 UI 上更新。

我的 View 模型如下:

public class ManikinStatusViewModel : DiViewModelBase
{
    private readonly ICommunicationService manikinCommunicationService;

    #region Properties
    public ObservableCollection<CasualtyStatusViewModel> Manikins { get; private set; }
    #endregion

    public ManikinStatusViewModel()
    {
        Manikins = new ObservableCollection<CasualtyStatusViewModel>();

        uow = UnitOfWorkFactory.Instance.CreateRunScenarioUnitOfWork(false);

        AccelermeterPacketData apd = new AccelermeterPacketData(56, 57, 58);

        manikinCommunicationService = new TestingCommunicationService(LoadAnalogSensorData(), apd);
        manikinCommunicationService.ManikinDataReceived += ManikinCommunicationService_ManikinDataReceived;

    }

    #region Events
    private void ManikinCommunicationService_ManikinDataReceived(object sender, ManikinDataReceivedEventArgs e)
    {
        if (e.ManiknDataPacket != null)
        {
            var manikin = Manikins.ToList().Find(m => m.ManikinId == e.ManiknDataPacket.SerialNumber);

            if (manikin == null)
            {
                Debug.WriteLine("Creating manikin with serial number: " + e.ManiknDataPacket.SerialNumber);

                CasualtyStatusViewModel csvm = new CasualtyStatusViewModel(e.ManiknDataPacket.SerialNumber);
                Manikins.Add(csvm);

                manikin = csvm;

                Debug.WriteLine("manikin count is: " + Manikins.Count());

            }

            manikin.UpdateManikinStatus(e.ManiknDataPacket);
        }
    }

    #endregion

我将人体模型集合绑定(bind)到以下 View 。

   <TabControl Grid.Row="1" ItemsSource="{Binding Manikins}" Name="ManikinsTabControl">
        <TabControl.Resources>
            <Style TargetType="TabItem">
                <Setter Property="Header" Value="Casualty"></Setter>
                <Setter Property="ContentTemplate" Value="{StaticResource CasualtyTemplate}"></Setter>
            </Style>
        </TabControl.Resources>
    </TabControl>

最佳答案

您必须在 View 模型中更新集合时引发 PropertyChanged 事件 并且您的 View 模型必须实现 INotifyPropertyChanged

关于c# - ObservableCollection 不更新项目源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21049713/

相关文章:

data-binding - 带有选项绑定(bind)的 knockout 集自定义属性

C# 泛型 - 设计没有下限?

c# - 在代码隐藏中添加网格

c# - XAML 文件是否可移植到 Xamarin Macintosh?

angular - 残疾人不工作

angular - 在 Angular 中渲染模板之前加载数据

c# - 无法从 IIS(内部服务器 500)使用 Visual Studio 2015 运行简单的 ASP.NET MVC 应用程序

c# - Windows 8 应用商店应用全局 View 模型

c# - 在启动 Appium session 之前获取可用设备列表

c# - 使用 InteractiveDataDisplay.WPF 导出图形