我遇到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;
}
答案 0 :(得分:1)
您可能还需要为PropertyChanged
提出MemoryUsageLevel
通知。您可以在IsFavourite
public bool IsFavourite
{
get { .. }
set {
...
RaisePropertyChanged("IsFavourite");
RaisePropertyChanged("MemoryUsageLevel");
}
}