2015-02-11 136 views
0

我将TextBlockText属性绑定到ObservableCollection,它是ViewModel属性的属性;通过准确的说其长度此ValueConverter直接属性绑定更新,DataContext绑定没有

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}}" /> 

这只能部分 - 值集合C或者最初是正确的,但在收集更改时从未更新过。

我在这里错过了什么?我还能如何通过集合中的更改来更新?

感谢您的帮助!

+1

你是什么意思的“集合变化”:收集项目添加/删除或分配一个新的集合?第二个问题:为什么不把你的'TextBlock.Text'绑定到'SubViewModel.Collection.Count'? – dymanoid 2015-02-12 09:25:45

+0

是的,项目被添加或删除;集合保持不变。我并没有将'Count'绑定到仅仅是因为我没有想到它 - 当然,这是可能的,它实际上似乎解决了这个问题,因为当集合被设置为'DataContext'时它正确更新。所以,如果您将此作为答案发布,我可以接受。 – TeaDrivenDev 2015-02-12 15:21:06

回答

1

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

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