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

问题描述 投票:0回答:1

感谢造访。

单击“刷新”按钮时,我无法刷新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中的Source属性。这是ViewModel中的bound属性:

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

                return null;
            }

        }
        set
        {
            udCol = value;
        }
    }

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

以下是Refresh按钮绑定的功能:

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

    }

我正在尝试上面的函数,这就是代码看起来多余的原因,但无论我做什么,此函数中的新赋值都不会更新UI。理想情况下,用户将更新UI中的单元格,然后单击“刷新”以返回原始状态或仅重新加载数据。 ViewModel继承了包含INotifyPropertyChanged的ViewModelBase,我认为这应该足以在更改属性时将更改传播到UI。我不想仅仅为了更新UI而打破MVVM模式。

我真的很感激一些帮助。非常感谢提前!

编辑:

我将View中的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">
c# xaml uwp mvvm-light telerik-grid
1个回答
0
投票

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

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

  • 您公开列表的属性(来源)
  • 列表本身(可观察的集合处理)
  • 您要公开的类型的每个属性(UserData的每个属性)
© www.soinside.com 2019 - 2024. All rights reserved.