Как обновить DataGrid - PullRequest
       18

Как обновить DataGrid

0 голосов
/ 16 мая 2019

DataContext приложения привязан к моей MainViewModel. Эта ViewModel имеет свойство services и некоторые другие свойства. Когда я запускаю службу, я хочу позвонить OnPropertyChanged("Services") внутри моих StartService() и RefreshServices(), но она не обновляется.

Мой XAML / DataGrid:

        <DataGrid x:Name="dataGrid" Grid.Row="2" Grid.ColumnSpan="8"
                  ItemsSource="{Binding Services}"
                  AutoGenerateColumns="False"
                  IsReadOnly="True">

            <DataGrid.Columns>
                <DataGridTextColumn Header="Display Name"  Binding="{Binding DisplayName, Mode=OneWay}"/>
                <DataGridTextColumn Header="Status" Binding="{Binding Status, Mode=OneWay}" />
                <DataGridTextColumn Header="Machine Name" Binding="{Binding MachineName, Mode=OneWay }" />
                <DataGridTextColumn Header="Can Stop" Binding="{Binding CanStop, Mode=OneWay}" />
            </DataGrid.Columns>
        </DataGrid>

Моя ViewModel:

namespace ServiceStarterPRAT.ViewModels
{
    public class MainViewModel : ObservableObject
    {
        #region Services Properties
        private ObservableCollection<ServiceController> _services;
        private ObservableCollection<ServiceController> _selectedServices;

        public ObservableCollection<ServiceController> SelectedServices
        {
            get
            {
                return _selectedServices;
            }
            set
            {
                if (_selectedServices == null) return;
                _selectedServices = value;
                OnPropertyChanged("SelectedServices");
            }
        }
        public ObservableCollection<ServiceController> Services
        {
            get
            {
                _services.Clear();
                var curenntServices = Utils.UpdateServices(ComputerNames);
                foreach (var service in curenntServices)
                    if (service.MachineName == SelectedComputer)
                        if (Utils.CustomerNameOf(service) == SelectedCustomer)
                            _services.Add(service);
                return _services;
            }
            set
            {
                //if (_services == null) return;
                _services = value;
                OnPropertyChanged("Services");
                OnPropertyChanged("SelectedServices");
            }
        }

        #endregion

Я думаю, что я не полностью понял OnPropertyChanged(). Я думал, что всякий раз, когда я вызываю что-то вроде OnPropertyChanged("Services"), все, что связано с Сервисами собственности, будет уведомлено и получит обновленные данные. Однако это не .. что я делаю не так. Какая информация вам нужна помимо моего XAML?

1 Ответ

1 голос
/ 16 мая 2019

Одна вещь, которую вы должны изменить, это:

        set
        {
            if (_selectedServices == null) return;
            _selectedServices = value;
            OnPropertyChanged("SelectedServices");
        }

_selectedServices изначально имеет значение null и останется таковым.Установка его всегда будет неудачной, потому что он всегда будет просто возвращаться.

Я предлагаю вам всегда использовать фигурные скобки также для if, кстати.Всегда ставьте свое заявление на следующей строке.

  if (_selectedServices == null) 
     {
         // this is a terrible idea because it will always be true and your setter stops the property being set
          return;
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...