我有一個自定義的控件,它在ItemsControl裏面提供了一個ComboBoxes列表。 ItemsControl綁定到一個int列表,因此每個ComboBox的DataContext只是一個int。這與SelectedIndex綁定,並且項目列表從別處引入。 ItemsControl的被定義爲直接綁定到DataContext的雙向綁定
<ItemsControl x:Name="itemsCtl" ItemsSource="{Binding SelectedSourceIndices}"
Grid.Row="1">
<ItemsControl.Resources>
<util:BindingProxy x:Key="parent" Data="{Binding}" />
</ItemsControl.Resources>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Source={StaticResource parent},Path=Data.SourceFieldNames}"
SelectedIndex="{Binding Path=DataContext,
RelativeSource={RelativeSource Self},
UpdateSourceTrigger=PropertyChanged,
Mode=TwoWay,
diag:PresentationTraceSources.TraceLevel=High}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
這最初看起來不錯,但我發現,當你點擊一個組合框和改變選擇,變化不會傳播到下面的列表中。
我確實有困難,最初得到這個綁定工作,因爲沒有路,並發現瞭如何here.然而,盤算,首先要看是直接這個奇怪的結合上下文,我修改了它,而不是綁定到一個IntContainer列表,它是一個只包含一個int屬性的類。這工作正常,但它很混亂。
雖然沒有錯誤,即使對綁定進行完全跟蹤,我也看到了診斷輸出的差異。它的體積是笨重,但在採用了直板INT更改值我看到
System.Windows.Data Warning: 90 : BindingExpression (hash=20081636): Update - got raw value '3'
System.Windows.Data Warning: 93 : BindingExpression (hash=20081636): Update - implicit converter produced '3'
System.Windows.Data Warning: 94 : BindingExpression (hash=20081636): Update - using final value '3'
System.Windows.Data Warning: 102 : BindingExpression (hash=20081636): SetValue at level 0 to ComboBox (hash=64451636) using DependencyProperty(DataContext): '3'
System.Windows.Data Warning: 101 : BindingExpression (hash=20081636): GetValue at level 0 from ComboBox (hash=64451636) using DependencyProperty(DataContext): '3'
System.Windows.Data Warning: 80 : BindingExpression (hash=20081636): TransferValue - got raw value '3'
System.Windows.Data Warning: 84 : BindingExpression (hash=20081636): TransferValue - implicit converter produced '3'
System.Windows.Data Warning: 89 : BindingExpression (hash=20081636): TransferValue - using final value '3'
,並在更改值使用IntContainer當我看到
System.Windows.Data Warning: 90 : BindingExpression (hash=35938393): Update - got raw value '1'
System.Windows.Data Warning: 94 : BindingExpression (hash=35938393): Update - using final value '1'
System.Windows.Data Warning: 102 : BindingExpression (hash=35938393): SetValue at level 0 to IntContainer (hash=56037929) using ReflectPropertyDescriptor(Value): '1'
System.Windows.Data Warning: 95 : BindingExpression (hash=35938393): Got ValueChanged event from IntContainer (hash=56037929)
System.Windows.Data Warning: 101 : BindingExpression (hash=35938393): GetValue at level 0 from IntContainer (hash=56037929) using ReflectPropertyDescriptor(Value): '1'
System.Windows.Data Warning: 80 : BindingExpression (hash=35938393): TransferValue - got raw value '1'
System.Windows.Data Warning: 89 : BindingExpression (hash=35938393): TransferValue - using final value '1'
所以它看起來像我以前做的方式當使用直線int時,獲得了綁定設置,最初獲取正確的值,但是將更改寫回到ComboBox本身,而不是寫入後備數組。這很奇怪,當然也沒有意義。
有誰知道如何更改綁定,以便更新列表中的值?
Thanks-更爲詳細和完整的比我的預期。 :) –