2013-04-09 1 views
0

Как обновить следующие ObservableCollection?Обновить ObservableCollection (переписать)

public class ViewModelProperties 
{ 
    private ObservableCollection<ServerProperties> properties; 

    public ObservableCollection<ServerProperties> Properties 
    { 
     get 
     { 
      properties = new ObservableCollection<ServerProperties>(); 

      for (var lineNumber = 0; lineNumber < MainWindow.lineCount; lineNumber++) 
      { 
       if (MainWindow.textProperties[lineNumber, 0] == null) break; 

       properties.Add(new ServerProperties(MainWindow.textProperties[lineNumber, 0], 
                MainWindow.textProperties[lineNumber, 1])); 
      } 

      return properties; 
     } 
    } 
} 

public class ServerProperties 
{ 
    private string property; 
    private string value; 

    public ServerProperties() 
    { 
    } 

    public ServerProperties(string property, string value) 
    { 
     Property = property; 
     Value = value; 
    } 

    public string Property 
    { 
     get 
     { 
      return this.property; 
     } 
     set 
     { 
      this.property = value; 
     } 
    } 

    public string Value 
    { 
     get 
     { 
      return this.value; 
     } 
     set 
     { 
      this.value = value; 
     } 
    } 

    public override string ToString() 
    { 
     return string.Format("[Property : {0}]", Value); 
    } 
} 

Я изменил значение textProperties[,] и теперь я хотел бы, чтобы перезаписать предыдущее содержимое коллекции с текущим содержанием textProperties[,].

Что было бы самым простым способом сделать это?

Любая помощь будет оценена по достоинству.

ответ

1

К примеру, один из самых простых решений может быть

public class ViewModelProperties 
{ 
    private ObservableCollection<ServerProperties> properties = new ObservableCollection<ServerProperties>(); 

    public ObservableCollection<ServerProperties> Properties 
    { 
     get 
     { 
      return properties; 
     } 
    } 

    public void SetProperties() 
    { 
     properties.Clear(); 
     for (var lineNumber = 0; lineNumber < MainWindow.lineCount; lineNumber++) 
     { 
      if (MainWindow.textProperties[lineNumber, 0] == null) break; 

      properties.Add(new ServerProperties(MainWindow.textProperties[lineNumber, 0], 
               MainWindow.textProperties[lineNumber, 1])); 
     } 

    } 
} 

Каждый раз, когда вы хотите добавить новые элементы в OC, просто вызовите метод SetProperties.

1

Начните с реализации INotifyPropertyChanged в вашей модели ViewModel, а также в объекте ServerProperties. Таким образом вы можете поднять событие PropetyChanged, которое вернется к пользовательскому интерфейсу.

ViewModel

public class ViewModelProperties : INotifyPropertyChanged { 

public event ProeprtyChangedEventHandler PropertyChanged; 

private ObservableCollection<ServerProperties> properties = new ObservableCollection<ServerProperties>(); 

public ObservableCollection<ServerProperties> Properties { 
    get { return properties;} 
    set { 
     properties = value; 
     this.RaisePropertyChangedEvent("Properties"); 
    } 
} 

private void RaisePropertyChanged(string propertyName) { 
    if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
} 
} 

Реализация этого на ServerProperties объекта, а также позволит изменять объекты, на любом уровне, и иметь его пузырек до интерфейса.

Наконец, изучите свой код популяции и, чтобы получить свойство для успешного обновления, сначала залейте его в список, а затем повторно инициализируйте ObservableCollection с помощью List.

Properties = new ObservableCollection<ServerProperties>(propertiesList); 

Это также позволяет лучше справляться с созданием вашего ObservableCollection и выполнения тестов перед отправкой выход на интерфейс. Надеюсь, поможет.

Смежные вопросы