2011-11-01 77 views
1

我对MultiBinding有问题。看起来第二个属性的最新值在第一个属性发生变化时没有被拾取。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> 

在视图模型:

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属性,它确实会触发多重绑定,我可以看到使用Converter的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

你可能不得不提高PropertyChanged通知MemoryUsageLevel为好。你可以在setter中加注IsFavourite

public bool IsFavourite 
    { 
     get { .. } 
     set { 
     ... 
     RaisePropertyChanged("IsFavourite"); 
     RaisePropertyChanged("MemoryUsageLevel"); 
     } 
    }