MultiBinding не получает второе свойство - PullRequest
1 голос
/ 01 ноября 2011

У меня проблема с MultiBinding.Кажется, что последнее значение второго свойства не выбирается при изменении первого свойства.

<Image Width="16" Source="../Images/YellowScales.png" Grid.Column="1" >
    <Image.Visibility>
         <MultiBinding Converter="{Converters:GoldScaleConverter}">
              <Binding Path="IsFavourite"/>                                            
              <Binding Path="MemoryUsageLevel"/>
         </MultiBinding>
    </Image.Visibility>
 </Image>

В ViewModel:

public bool IsFavourite
        {
            get { return _isFavourite; }
            set
            {
                if (_isFavourite == value)
                    return;

                _isFavourite = value;

                RaisePropertyChanged("IsFavourite");
                UnloadBookCommmand.RaiseCanExecuteChanged();
            }
        }

public double MemoryUsageLevel
        {
            get
            {
                return GetMemoryUsageLevel(this);
            }
        }

Первоначально при запуске приложения оба свойстваудаляются из конвертера, и он работает, как и ожидалось.

Однако, как только приложение запускается, и я изменяю свойство IsFavourite, оно запускает мультисвязывание, и я вижу в конвертере, что IsFavourite перевернул, но второе значението есть MemoryUsageLevel всегда 0.0.Получатель больше не срабатывает.

Но почему я думал, что MultiBinding предназначен для проверки последнего значения обоих Привязок?

Это преобразователь:

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            bool isFavourite = (bool) values[0];
            double memoryWarningLevel = (double) values[1];

            if(isFavourite && (memoryWarningLevel >= 50.00 && memoryWarningLevel < 75.00))
            {
                return Visibility.Visible;
            }
            return Visibility.Collapsed;

        }

1 Ответ

1 голос
/ 01 ноября 2011

Возможно, вам также нужно поднять PropertyChanged уведомление для MemoryUsageLevel. Вы можете поднять это в сеттер IsFavourite

   public bool IsFavourite 
   {
       get { .. }
       set {
         ...
         RaisePropertyChanged("IsFavourite"); 
         RaisePropertyChanged("MemoryUsageLevel"); 
       }  
   } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...