如何在Windows 10通用应用程序开发中使用LINQ或不使用LINQ在c#中点击更新ObservableCollec

本文关键字:LINQ 更新 ObservableCollec Windows 应用程序开发 10通 | 更新日期: 2023-09-27 18:01:27

你好,我是Windows应用程序开发的新手,我正在尝试在c#中更新一个ObservableCollection以动态地反映xaml UI中的变化,但是这些变化没有反映在UI中。我做错了什么吗?或者它不适合Windows 10或什么?

请有人纠正我或建议我一个更好的方法比我正在做的。

Thanks in Advance.

我的类:

public class Students
{
      public string Name;
      public int Age;
      Public int Section_no; 
 }

My c# code:

    public ObservableCollection<Students> student = new ObservableCollection<Students>();


    private void FilterItem_Click(object sender, RoutedEventArgs e)
    {
        MenuFlyoutItem selectedItem = sender as MenuFlyoutItem;
        if (selectedItem != null)
        {
            if (selectedItem.Tag.ToString() == "section")
            {
                student =new ObservableCollection<Students>(student.OrderBy(i => i.Section_no));
             }
            else if (selectedItem.Tag.ToString() == "age")
            {
                student = new ObservableCollection<Students>(student.OrderBy(i => i.Age));
            }
            else if (selectedItem.Tag.ToString() == "name")
            {
                student = new ObservableCollection<Students>(student.OrderBy(i => i.Name));
            }
        }
    }

如何在Windows 10通用应用程序开发中使用LINQ或不使用LINQ在c#中点击更新ObservableCollec

您的student变量必须是属性,以便您的UI正确绑定到它。不仅如此,当您在方法中创建集合的新实例时,它必须实现INotifyPropertyChanged

private ObservableCollection<Student> _Students;
public ObservableCollection<Student> Students
{
    get { return _Students; }
    set
    {
        _Students = value;
        //Notify property changed stuff.
        OnPropertyChanged();
    }
}

不要忘记为你的包含类实现INotifyPropertyChanged

当您尝试动态更新您的UI时,您需要使用数据绑定。首先是对象类,每个属性都需要实现INotifyPropertyChanged。如果操作正确,对这些属性的任何更改都将自动传播到UI。然后假设你的ObservableCollection被设置为ListView的ItemsSource,对它的任何更改也将被传播。

这是一篇关于使用INotifyPropertyChanged实现数据绑定的快速文章。它是为Windows 8.1通用应用程序编写的,但在Windows 10上也一样。

http://blogs.msdn.com/b/quick_thoughts/archive/2014/06/10/data-binding-part-3-implementing-the-inotifypropertychanged-interface.aspx