【发布时间】:2014-10-10 17:10:07
【问题描述】:
我有一个从 CollectionViewGroup 动态构建的 ControlTemplate。
我希望只有当所有项目的某个属性都设置为 true 时,它的可见性才为 true。我通过以下方式在某种程度上实现了这一点:
XAML
<Button Visibility="{Binding Path=Items, Converter={StaticResource AllAcceptedToVis}}" Click="Button_ShipmentComplete_Click" Width="150" Margin="100,0,0,0">Complete</Button>
C#
public class AllAcceptedToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var items = (IEnumerable<object>)value;
return items.Cast<MyObject>().All(m => m.Accepted) ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new InvalidOperationException("AllAcceptedToVisibilityConverter can only be used OneWay.");
}
}
这有效,但仅在加载时有效。它在初始创建后不检查更改,我怀疑是因为它绑定到地址列表(项目)而不是属性,所以它实际上检测到地址列表中没有任何更改(它们保持不变)。
我怎样才能完成上述操作,但让绑定动态监控所有 Items 属性的变化?
【问题讨论】:
-
@KingKing 这对他没有任何好处;该绑定针对集合实例,因此只有当
Items设置为新集合时才会调用转换器。绑定引擎不知道如果集合更改或集合中某个项目的某些属性发生更改,它应该重新评估绑定。