如何使用 UWP 和 MVVM Light 刷新 Telerik 数据网格

How to refresh a Telerik datagrid using UWP and MVVM Light

感谢您的光临。

我在单击“刷新”按钮时无法刷新 Telerik 网格。换句话说,如果用户更改了数据并决定不保存它,单击刷新按钮应该使用原始值重新加载网格。

这是我在刷新视图中的 XAML:

<Button Content="Refresh" Grid.Row="1" Margin="92,5,0,11" Command="{x:Bind ViewModel.RefreshDataCommand}"/>

这是我在网格视图中的 XAML:

<tg:RadDataGrid ColumnDataOperationsMode="Flyout"  x:Name="grid" ItemsSource="{Binding Source,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" SelectedItem="{x:Bind ViewModel.CurrentUserData, Mode=TwoWay}" UserEditMode="Inline"  Grid.ColumnSpan="4" Grid.Row="1" AutoGenerateColumns="False">

请注意,在上面的代码中,网格绑定到 ViewModel 中的源 属性。这是 ViewModel 中的绑定 属性:

public ObservableCollection<UserData> Source
    {
        get
        {
            try
            {
                udCol = GetUserData(FileName).Result;
                return udCol;
            }
            catch (AggregateException ex)
            {

                return null;
            }

        }
        set
        {
            udCol = value;
        }
    }

以上属性在页面导航到时自动加载网格中的数据。

刷新按钮绑定的函数如下:

private void RefreshDataCommandAction()
    {
        udCol[0].Name = "test1";
        CurrentUserData = udCol[0];
        Source = udCol;
        RaisePropertyChanged("Source");

    }

我在上面的函数中进行了试验,这就是代码看起来多余的原因,但无论我做什么,这个函数中的新赋值都不会更新 UI。理想情况下,用户将更新 UI 中的单元格并单击“刷新”返回原始数据或重新加载数据。 ViewModel 继承了包含 INotifyPropertyChanged 的​​ ViewModelBase,我认为这应该足以在 属性 更改时将更改传播到 UI。我不想为了更新 UI.

而破坏 MVVM 模式

非常感谢您的帮助。提前致谢!!!

编辑:

我将视图中的 XAML 改回了这个,因为它破坏了我的 ADD 功能:

<tg:RadDataGrid ColumnDataOperationsMode="Flyout"  x:Name="grid" ItemsSource="{x:Bind ViewModel.Source}" SelectedItem="{x:Bind ViewModel.CurrentUserData, Mode=TwoWay}" UserEditMode="Inline"  Grid.ColumnSpan="4" Grid.Row="1" AutoGenerateColumns="False">

源未实现更改通知,因此 UI 无法知道您分配了不同的实例。

在 MVVM 中绑定任何形式的列表时,3 个部分需要更改通知:

  • 属性 您在(来源)
  • 上公开列表
  • 列表本身(可观察集合负责处理)
  • 您公开的类型的每个 属性(UserData 的每个 属性)