直接 属性 绑定更新,DataContext 绑定不更新

Direct property binding updates, DataContext binding doesn't

我正在将 TextBlockText 属性 绑定到 ObservableCollection,即 属性 的 属性查看模型;通过这个 ValueConverter:

精确到它的长度
public class EnumerableToCountConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (null == value ? 0 : ((IEnumerable<object>)value).Count());
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

当集合发生以下变化时,这可以正常工作并正确更新 XAML:

<TextBlock Text="{Binding SubViewModel.Collection, Converter={StaticResource EnumerableToCountConverter}}" />

现在,因为我还需要其他地方的引用,所以我想将集合作为控件的 DataContext 并使用相对绑定路径:

<TextBlock DataContext="{Binding SubViewModel.Collection}"
           Text="{Binding Path=., Converter={StaticResource EnumerableToCountConverter}}" />

这仅部分有效 - 值最初设置正确,但在集合更改时从未更新。

我在这里错过了什么?我怎样才能让它随着集合中的变化而更新?

感谢您的帮助!

正如我在对原始问题的评论中所述,您可以将 TextBlock.Text 依赖项 属性 直接绑定到集合的 Count 属性,这样您就不必需要任何转换器。由于 ObservableCollection 实现引发 Count 属性 的 PropertyChanged 事件,您应该更新绑定目标。

<TextBlock DataContext="{Binding SubViewModel.Collection}" Text="{Binding .Count}" />