2016-05-16 4 views
-2

Это действительно странно, но интерфейс не обновляется, когда я звоню BindableBase.SetProperty():BindableBase.SetProperty не обновляет интерфейс

private string person; 
public string Person 
{ 
    get { return person; } 
    set 
    { 
     person = value; 
     SetProperty(ref this.person, value);//Not updating UI 
     //OnPropertyChanged("Person");//It works really nice 
    } 
} 

Я использую Prism.Core.6.1.0\lib\net45\Prism.dll и его Version=6.1.0.0.

Однако OnPropertyChanged(string propertyName) прекрасно работает:

public event PropertyChangedEventHandler PropertyChanged; 
public void OnPropertyChanged(string propertyName) 
{ 
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
} 

Что мне не хватает? Любая помощь будет принята с благодарностью! :)

+0

@downvoter почему вы downvote? – StepUp

ответ

1

Это из-за инструкции person = value;. BindableBase.SetProperty проверяет равенство между двумя параметрами и вызывает только событие PropertyChanged, если они не равны. Поэтому удаление этой строки должно помочь.

2

Путь SetProperty работает, выполняя всю необходимую логику обновления для вас. Он будет проверять, изменилось ли значение, затем либо немедленно вернуться, либо обновить значение (которое оно может сделать, поскольку оно передано ref), а затем поднять измененное свойство.

Вы делаете половину своей работы заранее, так что это не будет всегда возвращение сразу же, как это будет найти никакой разницы между person поля и value.

Просто измените свойство:

public string Person 
{ 
    get { return person; } 
    set { SetProperty(ref person, value); } 
} 
+0

Спасибо за ваш ответ! Это действительно здорово, но Grx70 был первым, и он дал хороший ответ. Я поддержал ваши усилия. Ваш ответ действительно приятный. – StepUp

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