2015-02-11 91 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}" />