wpf转换器绑定 - 错误顺序的动态绑定

时间:2010-08-05 08:42:42

标签: wpf

我正在尝试使用转换器

将组合框与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,但我的问题是动态绑定。

1 个答案:

答案 0 :(得分:1)

有一种方法可以强制您的绑定再次更新:

cmbModule.GetBindingExpression(ComboBox.ItemsSourceProperty).UpdateTarget();

另一种选择是创建一个DependecyProperty,它包含选项卡集合,然后将Combobox和MenuTab绑定到同一属性。 SelectedIndex可以像现在一样完成。

第三个选项是创建ObservableCollection类型的属性,该属性保存所需的信息,然后创建2个转换器,一个转换为tabitem,另一个转换为Combobox项。如果您从集合中添加或删除项目,则会自动触发绑定。