2015-04-16 2 views
2

Согласно MSDN doc on PropertyChanged, если вы передадите пустую строку методу, все свойства будут обновлены. Есть ли такая вещь при использовании MvvmLight RaisePropertyChanged? Передача "" просто перетащите событие с помощью "".MvvmLight RaisePropertyChanged ("")

+0

прочитайте статью [спросите] ... пожалуйста, разместите соответствующий код, чтобы помочь нам помочь –

+1

MVVMLight 'RaisePropertyChanged' - это реализация' INotifyPropertyChanged', см. Здесь: http: //mvvmlight.codeplex. com/SourceControl/latest # V3/GalaSoft.MvvmLight/GalaSoft.MvvmLight (NET35) /ViewModelBase.cs, поэтому я считаю, что он будет делать то же самое здесь, когда * используя либо null, либо String.Empty как имя свойства в PropertyChangedEventArgs. * – Bolu

+0

@Bolu Взгляд на исходный код сказал бы иначе. Похоже, что он все равно будет генерировать исключение, если вы передадите либо null, либо String.Empty, если он создан в Debug. –

ответ

2

MVVM Light, кажется, checkthat будет проверять, если имя свойства вы прошли в существует. В этом случае это не имеет смысла.

Быстрый поиск показывает issue logged on the CodePlex site и отмечен как закрытый & исправлен, и он, кажется, исправлен в последней кодовой базе. Какую версию ты используешь?

Если вы не можете обновить, я предположил, что вы могли бы добавить свой собственный invocator (обратите внимание, что защищенный PropertyChangedHandler accessor существует в 5.x, я понятия не имею, существует ли он в вашей версии).

private void RaiseAllPropertiesChanged() 
{ 
    var handler = PropertyChangedHandler; 

    if (handler != null) 
    { 
     handler(this, new PropertyChangedEventArgs(string.Empty));    
    } 
} 

Если вы используете V3, кажется, нет никакого решения (PropertyChangedHandler не существует и проверка свойство будет бросать исключение, вы видите). Поскольку это, кажется, известная ошибка, которая исправлена, я бы предложил использовать более позднюю версию.

+0

Ваш код кажется очень интересным. Когда я пытаюсь это сделать, я получаю ошибку компиляции: «Событие« ObservableObject.PropertyChanged »может появляться только с левой стороны + = или - =». Кажется, что он выбирает один из GalaSoft! – emoreau99

+0

Да, 'PropertyChanged' - это событие, поэтому вы не можете использовать его для вызова события из производного класса. В коде, который я читал, есть accessor 'PropertyChangedHandler', который позволит это (это то, что находится в коде выше). Это может быть или не быть в вашей версии. –

+0

Отлично. Благодарю. – emoreau99

0

Не уверен, MVVM-Light, но вот то, что вы можете сделать с .net FX 4.5 +:

using System.Runtime.CompilerServices; 

class SomeClass : INotifyPropertyChanged 
{ 
    private int somefield; 

    public int SomeProperty 
    { 
     get { return somefield; } 
     set 
     { 
      somefield = value; 
      OnPropertyChanged(); 
     } 
    } 

    public void OnPropertyChanged([CallerMemberName] string propertyName = "") 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    public event PropertyChangedEventHandler PropertyChanged = delegate { }; 
} 
+0

Альтернатива The Fody Framework, которая реализует INotifyPropertyChanged с простыми атрибутами ... https://github.com/Fody/PropertyChanged –

+0

Я предпочитаю придерживаться MvvmLight из-за всех других преимуществ – emoreau99

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