感谢造访。
单击“刷新”按钮时,我无法刷新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">
Source未实现更改通知,因此UI无法知道您分配了不同的实例。
在MVVM中绑定任何形式的列表时,3个部分需要更改通知: