2010-08-05 4 views
2

I 변환기를 사용하여 Tabitems와 콤보를 결합하려고 바인딩WPF 계산기 바인딩 - 동적은 잘못된 순서로

다음과 같이 내 변환기 클래스입니다

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> 

내가 지금 뭐하는 거지 나는이 코드 숨김에서 사용자 지정을 TabControl입니다 항목 'mnuMain'을 결합하고 난 때문에 컨버터 화재 첫째 후 'mnuMain'tabitems과 콤보를 popularate 드릴 수 없습니다. xaml에 Tabitems를 만들면 콤보 박스에는 tabitems가 채워지지만 동적 바인딩에는 문제가 있습니다.

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

또 다른 옵션 탭의 컬렉션을 보유하고 DependecyProperty를 만든 다음 같은 속성에 콤보 상자와 MenuTab을 결합하는 것입니다

답변

1

은 다시 업데이트 할 바인딩을 강제 할 수있는 방법이있다. SelectedIndex는 지금과 같은 방법으로 수행 할 수 있습니다.

세 번째 옵션은 필요한 정보를 보유한 ObservableCollection 유형의 속성을 만든 다음 2 개의 변환기를 만들고 하나는 Tabitem으로 변환하고 1은 Combobox 항목으로 변환합니다. 컬렉션에서 항목을 추가하거나 제거하면 바인딩이 자동으로 트리거됩니다.

+0

대단히 감사합니다. 그 해결책을 주셔서 감사합니다. – sumanth

+1

'TextBox'에서 작업하는 동안'txtFrequencyEditMode.GetBindingExpression (TextBox.TextProperty) .UpdateSource()'를 사용하여 소스를 업데이트했습니다! – Nasenbaer