【发布时间】:2017-12-26 22:57:48
【问题描述】:
感谢您的光临。
单击“刷新”按钮时,我无法刷新 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 中的绑定属性:
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">
【问题讨论】:
标签: c# xaml uwp mvvm-light telerik-grid