我已经寻找了一天半的解决方案。我得到的大多数解释/半解释情况的示例都与具有“静态”类型项目的组合框有关。我有以下结构。
数据模型项
DataFilter 类中的 ObservableCollection CombinedData(即具有其他属性,包括“用于按钮内容的父名称”)
DataFilterGroup 类中的 ObservableCollection 过滤器
DataFilterGroup 是 DataViewModel 中的 1 项
所以window的DataContext就是DataViewModel。
我有一个 DataTemplate,我想在其中显示来自后面代码的 DataFilterGroup 项
这是我需要帮助的地方!!
所以基本上:ItemsControl 的 Itemsource 绑定到 DataFilterGroup
如何在 DataFilter 中绑定组合框,使其项目源指向 DataFilter。因此源会改变(或者组合框的内容会随着每个 DataFilterGroup 项而改变)。
如果这是一个重复的问题,我很抱歉。到目前为止,我所拥有的是以下内容(并尝试了几种绑定组合框的方法,但没有出现任何项目。令人惊讶的是,Buttoncontent 出现了。特殊的组合是来自 Combobox 的控件派生,它是一个按钮和组合框。
private static DataTemplate DataFilterTemplate
{
get
{
DataTemplate DFT = new DataTemplate();
DFT.DataType = typeof(DataFilters);
FrameworkElementFactory Stack = new FrameworkElementFactory(typeof(VirtualizingStackPanel));
Stack.SetValue(VirtualizingStackPanel.DataContextProperty, new Binding());
Stack.SetValue(VirtualizingStackPanel.OrientationProperty, Orientation.Horizontal);
FrameworkElementFactory Item = new FrameworkElementFactory(typeof(SpecialCombo));
//Item.SetValue(SpecialCombo.DataContextProperty, new Binding());
Item.SetValue(SpecialCombo.ButtonContentProperty, new Binding("ParentName"));
Binding b = new Binding("CombinedData");
//b.RelativeSource.AncestorType = typeof(ItemsControl);
Item.SetBinding(SpecialCombo.ItemsSourceProperty, b);
//Item.SetValue(SpecialCombo.ItemsSourceProperty, new Binding("CombinedData"));
Item.SetValue(SpecialCombo.DisplayMemberPathProperty, "FullName");
Item.SetValue(SpecialCombo.SelectedValuePathProperty, "Index");
Item.SetValue(SpecialCombo.SelectedValueProperty, "SelectedItem");
Item.SetValue(SpecialCombo.ToggleVisibleProperty, new Binding("ComboVisibility"));
//Item.SetValue(SpecialCombo.SelectedValueProperty, new Binding("SelectedItem"));
Stack.AppendChild(Item);
DFT.VisualTree = Item;
return DFT;
}
}
Child 是 ItemsControl
Child.ItemsSource = DVM.Filters.FullCollection;
Child.ItemTemplate = DataFilterTemplate;