我正在尝试使用转换器
将组合框与Tabitems绑定我的转换器类如下
public class TabItemsCollection : IValueConverter
{
>public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
ItemCollection collection = value as ItemCollection;
IList<string> names = new List<string>();
foreach (TabItem ti in collection.SourceCollection)
{
names.Add(ti.Header.ToString());
}
return names;
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
我的xaml如下
//组合框
<ComboBox Name="cmbModule"
ItemsSource="{Binding ElementName=mnuMain, Path=Items, Converter={StaticResource MenuItemsConverter}}" SelectedIndex="{Binding ElementName=mnuMain, Path=SelectedIndex}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
// TabControl
<local:MenuTab Name="mnuMain"></local:MenuTab>
我将'mnuMain'绑定到代码隐藏中的自定义tabcontrol项目,因为我这样做我无法使用tabitems推广组合框,因为转换器首先触发,然后是'mnuMain'。如果我在xaml中创建Tabitems,组合框中会填充tabitems,但我的问题是动态绑定。
答案 0 :(得分:1)
有一种方法可以强制您的绑定再次更新:
cmbModule.GetBindingExpression(ComboBox.ItemsSourceProperty).UpdateTarget();
另一种选择是创建一个DependecyProperty,它包含选项卡集合,然后将Combobox和MenuTab绑定到同一属性。 SelectedIndex可以像现在一样完成。
第三个选项是创建ObservableCollection类型的属性,该属性保存所需的信息,然后创建2个转换器,一个转换为tabitem,另一个转换为Combobox项。如果您从集合中添加或删除项目,则会自动触发绑定。