MultiBinding不会获取第二个属性

时间:2011-11-01 09:58:24

标签: c# .net wpf xaml

我遇到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是为了检查两个Bindings的最新值?

这是转换器:

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 个答案:

答案 0 :(得分:1)

您可能还需要为PropertyChanged提出MemoryUsageLevel通知。您可以在IsFavourite

的设置器中提高此值
   public bool IsFavourite 
   {
       get { .. }
       set {
         ...
         RaisePropertyChanged("IsFavourite"); 
         RaisePropertyChanged("MemoryUsageLevel"); 
       }  
   }