привязка конвертера wpf - динамическая привязка в неправильном порядке - PullRequest
2 голосов
/ 05 августа 2010

Я пытаюсь связать комбинированный список с 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 в codebehind, так как я не могу заполнить комбинированный список tabitems, потому что сначала запускается конвертер, а затем mnuMain. Если я создаю Tabitems в xaml, в поле со списком добавляются tabitems, но моя проблема связана с динамическим связыванием.

1 Ответ

1 голос
/ 05 августа 2010

Существует способ принудительно обновить привязку:

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

Другой вариант - создать DependecyProperty, который содержит коллекцию вкладок, а затем привязать Combobox и MenuTab к одному и тому же свойству.SelectedIndex можно сделать так же, как вы делаете сейчас.

Третий вариант - создать свойство типа ObservableCollection, содержащее необходимую информацию, а затем создать 2 конвертера, один для преобразования в tabitem и1, чтобы преобразовать в элемент Combobox.Если вы добавляете или удаляете элемент из коллекции, привязка срабатывает автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...