c# MVVM 如何刷新 ViewModel 中的数据网格项目源

c# MVVM how to refresh datagrid itemsource in the ViewModel

我是 C# 和 MVVM 的初学者。

我有一个数据网格,我尝试使用按钮命令来刷新它。但它不起作用。

我的XAML代码

 <DataGrid ItemsSource="{Binding Src_ListeApplicationARV, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"
        IsReadOnly="true" x:Name="Dt_ListeApplicationARV">

 <Button Name="btn_synchro" 
                    Style="{StaticResource MaterialDesignFloatingActionLightButton}"
                    Command="{Binding SynchroCommand}"
                    
                    materialDesign:ButtonProgressAssist.IsIndicatorVisible="{Binding IsSaving}"
                    materialDesign:ButtonProgressAssist.IndicatorForeground="DarkGoldenrod"
                    materialDesign:ButtonProgressAssist.Value="{Binding SaveProgress}"
                     
                    Width="35" HorizontalAlignment="Left" Margin="39,4,0,5" Cursor="Hand" Grid.Column="1" Height="35" Background="Transparent" BorderBrush="#6D92A0">
                <!-- simple example of toggling/animating pack icon with a data trigger-->
                <materialDesign:PackIcon Height="18" Width="19" Background="Transparent" Foreground="#6D92A0">
                            
                    <materialDesign:PackIcon.Style>
                        <Style TargetType="materialDesign:PackIcon">

                            <Setter Property="Kind" Value="CloudSyncOutline" />

                            <Style.Triggers>
                                <DataTrigger Binding="{Binding IsSaveComplete}" Value="false">
                                    <Setter Property="Kind" Value="CloudSyncOutline" />
                                </DataTrigger>
                                <DataTrigger Binding="{Binding IsSaveComplete}" Value="True">
                                    <Setter Property="Kind" Value="Check" />
                                   
                                    <DataTrigger.EnterActions>
                                        <BeginStoryboard Name="synchroboard">
                                            <Storyboard>
                                                <DoubleAnimation
                                                            Storyboard.TargetProperty="Opacity"
                                                            From="0"
                                                            To="1"
                                                            Duration="0:0:0.8" />
                                            </Storyboard>
                                            
                                        </BeginStoryboard>
                                  
                                    </DataTrigger.EnterActions>
                                   
                                </DataTrigger>
                            </Style.Triggers>
                          
                        </Style>
                    </materialDesign:PackIcon.Style>
                </materialDesign:PackIcon>
            </Button>
                 

我的代码在后面

  public ListeLogiciels()
        {
            InitializeComponent();      
            DataContext = new ListeLogicielsViewModel();
           

        }

视图模型

 public class ListeLogicielsViewModel : ViewModelBase
    {

        public ICommand SynchroCommand { get; }

        public List<Models.ApplicationClient> Src_ListeApplicationARV
        {
            get { return LoadApplications(); }
            set
            {
                Src_ListeApplicationARV = LoadApplications();
                // Call OnPropertyChanged whenever the property is updated
                OnPropertyChanged("");
            }

         public ListeLogicielsViewModel()
        { 
            var Dt_ListeApplicationARV = this.LoadApplications();// get data in a list
         
            SynchroCommand = new AnotherCommandImplementation(_ => 
// reload dataSource
);
}

如何使用这个 Dt_ListeApplicationARV 设置我的数据网格视图?这只是一个愚蠢的代码,我被阻止了。 感谢您的帮助。

我正在尝试重新加载 viewModel 中的数据网格。

在 WPF 中,当您想要将列表显示为控件的 ItemsSource 时,您需要使用 ObservableCollection 而不是 List。它和 List 一样是可枚举的,但它 auto-handle NotifyCollectionChanged 事件。

替换

        public List<Models.ApplicationClient> Src_ListeApplicationARV
        {
            get { return LoadApplications(); }
            set
            {
                Src_ListeApplicationARV = LoadApplications();
                // Call OnPropertyChanged whenever the property is updated
                OnPropertyChanged("");
            }

   public ObservableCollection<Models.ApplicationClient> Src_ListeApplicationARV {get; set;}

不要忘记在构造函数中实例化 ObservableCollection。

有了这个,您只需在视图模型中向 Src_ListeApplicationARV 添加或删除项目,它会自动在 UI.

中进行更改

OnPropertyChanged() 必须用于 属性 而不是集合。
示例:

private string _name;
public string Name
{
    get { return _name; }
    set
    {
        _name = value;
        OnPropertyChanged(nameof(Name));
    }
}

抱歉我的英语不好,我是法国开发人员。