如何在 ViewModel 更改时让 View 更新

蒸汽23

我正在构建一个 WPF 应用程序来管理存储在 SharePoint 列表中的学生数据库。我是使用 MVVM 的新手,并且已经阅读了几个教程。我已经成功创建了一个视图和模型,并设法将它绑定到一个数据网格控件。我想做的是根据组合框的输出更新视图中的数据。

这是我的模型:

using System.ComponentModel;

namespace StudentManagement.Model
{
public class Student : INotifyPropertyChanged
{
    private string _Title;
    private string _FullName;

    public string Title
    {
        get { return _Title; }
        set
        {
            if (_Title != value)
            {
                _Title = value;
                RaisePropertyChanged("Title");
            }
        }
    }

    public string FullName
    {
        get { return _FullName; }
        set
        {
            if (_FullName != value)
            {
                _FullName = value;
                RaisePropertyChanged("FullName");
            }

        }

    }



    public event PropertyChangedEventHandler PropertyChanged;

    private void RaisePropertyChanged(string property)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
    } 
  }
}

这是视图模型:

using System.Collections.ObjectModel;
using StudentManagement.Model;
using SP = Microsoft.SharePoint.Client;
using StudentManagement.publicClasses;

namespace StudentManagement.ViewModel
{
    public class StudentViewModel
    {
        public ObservableCollection<Student> Students { get; set; }

        public void LoadStudents(string query)
        {


           ObservableCollection<Student> _students = new 
        ObservableCollection<Student>();

        SP.ClientContext ctx = clientContext._clientContext;

        SP.CamlQuery qry = new SP.CamlQuery();
        qry.ViewXml = query;
        SP.ListItemCollection splStudents = 
 ctx.Web.Lists.GetByTitle("Students").GetItems(qry);
        ctx.Load(splStudents);
        ctx.ExecuteQuery();

        foreach (SP.ListItem s in splStudents)
        {
            _students.Add(new Student { Title = (string)s["Title"], FullName = (string)s["FullName"] });
        }
        Students = _students;

        }
    }
}

这是我的 XAML

<UserControl x:Class="StudentManagement.Views.StudentsView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
  
             xmlns:local="clr-namespace:StudentManagement.Views" >


    <Grid>

        <StackPanel HorizontalAlignment="Left" Width="200" >
            <TextBox Name="txtSearch" AcceptsReturn="True" ></TextBox>
            <ComboBox Name="cmbStatus"  SelectionChanged="cmbStatus_SelectionChanged" SelectedIndex="0">
                <ComboBoxItem>Active</ComboBoxItem>
                <ComboBoxItem>Inquiring</ComboBoxItem>
                <ComboBoxItem>Inactive</ComboBoxItem>
                <ComboBoxItem>Monitoring</ComboBoxItem>
            </ComboBox>
            <DataGrid Name="dgStudentList" ItemsSource="{Binding Path=Students}" AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Name" Binding="{Binding Title, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="100"/>
                    <DataGridTextColumn Header="Parent" Binding="{Binding FullName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="100" />
                </DataGrid.Columns>
            </DataGrid>
        </StackPanel>
    </Grid>
</UserControl>

...以及视图背后的代码:

using System.Windows.Controls;
using StudentManagement.ViewModel;

namespace StudentManagement.Views
{
    /// <summary>
    /// Interaction logic for StudentsView.xaml
    /// </summary>
    public partial class StudentsView : UserControl
    {
        private StudentViewModel _viewModel = new 
StudentViewModel();

    public StudentsView()
    {
            InitializeComponent();
            DataContext = _viewModel;
        }

        private void cmbStatus_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            string combotext = ((sender as ComboBox).SelectedItem as ComboBoxItem).Content as string;   
            string qry = @"<View>  
                        <Query> 
                            <Where><Eq><FieldRef Name='Current_x0020_Status' /><Value Type='Choice'>" + combotext + @"</Value></Eq></Where> 
                        </Query> 
                       </View>";

            _viewModel.LoadStudents(qry);

        }
    }
}

就目前而言,学生在加载时加载到数据网格中就好了。当事件 cmbStatus_SelectionChanged 触发时,我已经完成了测试,我可以看到 LoadStudents 函数触发并返回正确数量的条目,但数据网格上没有任何更新。

我敢肯定这是一个菜鸟错误,我错过了一些基本的东西,但这个我正在努力,我很感激任何指导。

安迪

由于StudentViewModel.LoadStudents()更改了Students属性的值,因此视图模型需要通知视图此更改。你可以通过StudentViewModel实现来做到这一点INotifyPropertyChanged(就像Student做一样)。DataGrid将订阅的PropertyChanged事件,当事件被触发将更新其内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在目录更改时更新提示

来自分类Dev

如何在文件更改时更新UI

来自分类Dev

当ViewModel中的实体模型更改时更新UI

来自分类Dev

如何在TextView更改时刷新Recycler View

来自分类Dev

ViewModel更改后如何正确更新Model?

来自分类Dev

如何在更改时更新文本输入

来自分类Dev

值更改时如何在UIKit中更新SwiftUI视图?

来自分类Dev

当其ViewModel可观察到的更改时,淘汰表组件视图未更新

来自分类Dev

骨干网:集合更改时如何更新集合视图?

来自分类Dev

范围值更改时如何更新md-select选项?

来自分类Dev

当控制器中的值更改时如何更新DOM

来自分类Dev

数据库更改时如何更新Hibernate

来自分类Dev

如何从C#更新文件的更改时间?

来自分类Dev

范围变量更改时如何获取动态视图以正确更新

来自分类Dev

表单中没有更改时如何禁用按钮[更新]

来自分类Dev

变量更改时如何更新异步等待功能?

来自分类Dev

关于在索引更改时如何更新数组的建议

来自分类Dev

Docker:当代码更改时如何更新容器

来自分类Dev

用户更改时如何更新设备语言

来自分类Dev

值未更改时如何更新AngularJS视图?

来自分类Dev

当data- *属性更改时如何更新元素

来自分类Dev

仅在数据更改时如何更新缓存?

来自分类Dev

范围值更改时如何更新md-select选项?

来自分类Dev

范围值更改时如何使用angularJs更新UI?

来自分类Dev

如何呈现动态数组并在数据更改时更新

来自分类Dev

如何在选择更改时更新vaadin选项卡中的内容?

来自分类Dev

当地址更改时,如何在tmux中更新DBUS_SESSION_BUS_ADDRESS?

来自分类Dev

如何在状态更改时强制重新加载 react-recaptcha(语言更新)

来自分类Dev

如何从ViewModel访问View控件?

Related 相关文章

  1. 1

    如何在目录更改时更新提示

  2. 2

    如何在文件更改时更新UI

  3. 3

    当ViewModel中的实体模型更改时更新UI

  4. 4

    如何在TextView更改时刷新Recycler View

  5. 5

    ViewModel更改后如何正确更新Model?

  6. 6

    如何在更改时更新文本输入

  7. 7

    值更改时如何在UIKit中更新SwiftUI视图?

  8. 8

    当其ViewModel可观察到的更改时,淘汰表组件视图未更新

  9. 9

    骨干网:集合更改时如何更新集合视图?

  10. 10

    范围值更改时如何更新md-select选项?

  11. 11

    当控制器中的值更改时如何更新DOM

  12. 12

    数据库更改时如何更新Hibernate

  13. 13

    如何从C#更新文件的更改时间?

  14. 14

    范围变量更改时如何获取动态视图以正确更新

  15. 15

    表单中没有更改时如何禁用按钮[更新]

  16. 16

    变量更改时如何更新异步等待功能?

  17. 17

    关于在索引更改时如何更新数组的建议

  18. 18

    Docker:当代码更改时如何更新容器

  19. 19

    用户更改时如何更新设备语言

  20. 20

    值未更改时如何更新AngularJS视图?

  21. 21

    当data- *属性更改时如何更新元素

  22. 22

    仅在数据更改时如何更新缓存?

  23. 23

    范围值更改时如何更新md-select选项?

  24. 24

    范围值更改时如何使用angularJs更新UI?

  25. 25

    如何呈现动态数组并在数据更改时更新

  26. 26

    如何在选择更改时更新vaadin选项卡中的内容?

  27. 27

    当地址更改时,如何在tmux中更新DBUS_SESSION_BUS_ADDRESS?

  28. 28

    如何在状态更改时强制重新加载 react-recaptcha(语言更新)

  29. 29

    如何从ViewModel访问View控件?

热门标签

归档