2014-12-17 4 views
1

У меня есть TabItem, у которого есть свойство IsEnabled, связанное с свойством ViewModel, которое называется IsSaved.Как связать свойство IsEnabled с более динамичным свойством в ViewModel?

Это выглядит следующим образом:

<TabItem Header="POs" 
     IsEnabled="{Binding IsSaved, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"> 

Красивая, правда? В моем ViewModel свойство IsSaved не так просто. Она определяется как:

public bool IsSaved 
{ 
    get 
    { 
     return IsDeveloper 
        && CheckValidation(null) 
        && !IsDirty 
        && !displayMasterRepository.IsObjectChanged(); //TODO: this does not work. 
    } 
} 

Теперь, очевидно, это никогда не будет обновлять вид, потому что есть на OnPropertyChanged событие происходит здесь. На самом деле, если бы я знал, куда положить OnPropertyChanged, я бы хотел, но в этом случае многие, многие вещи могут вызвать изменение этого свойства, чтобы это не имело смысла. Что бы кто-то сделал в этой ситуации?

Если это была кнопка с привязкой к команде, я бы передал IsSaved в команду делегата в качестве параметра CanExecute, и она будет работать динамически. Есть ли что-то подобное для такой ситуации? Благодаря!

ответ

4

Вы можете вызвать OnPropertyChanged из любого места в вашем коде в области вашего класса.

 OnPropertyChanged("IsSaved"); 

Кроме того я хотел выставить публичную функцию для других классов, чтобы поднять изменения свойства, что-то вроде:

 public void RefreshIsSaved() 
    { 
     OnPropertyChanged("IsSaved"); 
    } 

Или что-то немного менее конкретное, например:

 public void RaisePropertyChanged(string propertyName) 
    { 
     OnPropertyChanged(propertyName);  
    } 

ли это то, что вы спрашиваете?

В качестве примечания вы также можете написать свойство в нагляднее:

 public bool IsSaved 
     { 
      get 
      { 
       if(IsDirty || displayMasterRepository.IsObjectChanged()) 
        return false; 

       return IsDeveloper && CheckValidation(null); 
      } 
     } 

Это будет гораздо легче поддерживать, если будет добавлено более сложные условия для вашей собственности, и это гораздо более удобным для чтения.

+0

Отлично, спасибо! –

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