2011-03-27 3 views
3

Я Свойство массива называется Value:массива изменения события

public string[,] Value { get; set; } 

Я хочу, чтобы вызвать метод Save(), когда любое значение массива (а не весь массив) изменилось.

Есть ли простой способ его реализации?

ответ

4

Не совсем. Массивы очень примитивные и не уведомляйте вас, когда что-то изменится.

Лучшее, что вы можете сделать, это создать который действует как 2D-массив, но, кроме того, он вызывает событие, когда элемент был изменен. Затем ваш текущий класс подписывается на это событие и вызывает Save().

Некоторые дополнительные комментарии:

  • Вы, вероятно, не хотят подвергать сеттер, это позволяет людям изменить какой массив вы указываете на. Вероятно, вы хотите открыть только getter, чтобы они могли изменять значения, но не весь массив.
  • Возможно, уже существует тип, о котором я упоминал, я не знаю ни одного.
  • Если вы собираетесь изменять API-интерфейсы, в любом случае может возникнуть смысл разоблачить индексатор в вашем классе, а затем вызвать Save() при вызове установщика индексатора. Смотри ниже.
 
    public string this[int x, int y] 
    { 
     get { return this.localArray[x,y]; } 
     set 
     { 
      this.localArray[x,y] = value; 
      this.Save(); 
     } 
    } 
2

Почему бы не создать собственный индексатор (например, одного here, так что вы точно знаете, когда ваш «массив» обновляется? Вы можете позвонить Save из сеттера.

3

Не используйте массив. Подумайте ObservableCollection <>, сделайте свой собственный, если тот, который находится в коробке, не соответствует вашим потребностям. И отпустите setter, вы не хотите, чтобы клиентский код разорвал ваши уведомления.

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