我在这里倾注了答案和例子,但似乎没有解决我的问题。
我有一个典型的DataGridTemplateColumn,带有TextBlock和ComboBox:
<DataGridTemplateColumn Header="Section" SortMemberPath="SectionName" CanUserSort="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding SectionName}">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Background" Value="{Binding SectionName, Converter={StaticResource SectionBackgroundConverter}}"/>
<Setter Property="Padding" Value="5,5,5,5"></Setter>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate >
<DataTemplate >
<ComboBox x:Name="cmbSections" ItemsSource="{Binding Path=g_colZDSectionNames}" SelectedItem="{Binding SectionName}" FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
TextBlock绑定到绑定到DataGrid的对象列表中的对象。它按预期显示其属性。
ComboBox需要绑定到运行时未知的字符串集合,直到函数调用Web服务来获取值。然后我将另一个不在DataGrid中的名为cmbDefaultSections的ComboBox绑定到以下ZDSection对象。它按预期显示列表。但是,如果我将DataBrid中的cmbSections绑定到同一个对象,或者如果我按照建议将其绑定到ObservableCollection(Of String),则它仍然为空。我怀疑这是因为在运行时创建ComboBox时,名为Sections的DynamicResource是Nothing,正如预期的那样。
在我的代码隐藏中,我正在设置另一个ComboBox的ItemsSource:
cmbDefaultSections.ItemsSource = New ZDSections.ZDSection
现在我该如何设置cmbSections?它无法从代码中获取。我已经尝试在集合对象上实现INotifyCollectionChanged,以便它自动更新,但无济于事:
Public Class ZDSection
Inherits ObservableCollection(Of String)
Implements INotifyCollectionChanged
Public Sub New()
If g_lstZDSections IsNot Nothing Then
For Each section In g_lstZDSections
Me.Add(section.Name)
Next section
Call OnCollectionChanged(New NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset))
End If
End Sub
Public Shadows CollectionChanged As NotifyCollectionChangedEventHandler
Protected Overrides Sub OnCollectionChanged(e As NotifyCollectionChangedEventArgs)
MyBase.OnCollectionChanged(e)
If CollectionChanged IsNot Nothing Then
CollectionChanged.Invoke(Me, e)
End If
End Sub
End Class
提前感谢您的建议!
答案 0 :(得分:0)
分配ItemsSource
只能进行一次。似乎ZDSection
过度杀戮,只有ObservableCollection<string>
就足够了,因为它天生地通知收集更改并且ComboBox
项已更新。
comboBox.ItemsSouce = stringCollection;
其他地方:
stringCollection.Add(stringFetched);
答案 1 :(得分:0)
经过几天的死胡同,最终使用Collection Loading Data and Binding Controls in WPF with CollectionViewSource中描述的CollectionViewSource工作。