2017-11-30 4 views
0

나는이 XAML이 있습니다WPF 바인드 Combobox.ItemsSource는

<TabControl ItemsSource="{Binding Items}"> 
    <TabControl.ContentTemplate> 
    <DataTemplate> 
     <ComboBox ItemsSource="{Binding Foo}"/> 
    </DataTemplate> 
    </TabControl.ContentTemplate> 
</TabControl> 

나는 특히, 사용자 정의 TabItem 클래스입니다 Items 바인딩 싶습니다

public class CustomItem : TabItem 
{ 
    public ObservableCollection<string> Foo { get; set; } 
} 

에서 MainWindow.cs 나는 Items 정의 :

public ObservableCollection<CustomItem> Items {get; set;} = new ObservableCollection<CustomItem>{new CustomItem{Foo = new ObservableCollection<string>{"foo1", "foo2"} } }; 

난과 짧은 싶습니다 위에서 정의한 콤보 상자를 Foo 요소와 함께 먹었으므로 "foo1"과 "foo2"를보고 싶습니다. 나는 그것이 DataContext 문제라고 생각합니다, 그래서 나는 다음 코드를 시도하지만 아무 일도 발생하지 : 사실 난 아무것도 볼 수 없었다

<ComboBox d:DataContext="{d:DesignInstance local:CustomItem}" ItemsSource="{Binding Foo}/>" 

가 어떻게 내 문제를 해결할 수 있을까?

답변

1

XAML은 꽤 괜찮지 만 CustomItemTabItem에서 파생해서는 안됩니다. 그 결과로 TabControl은 매우 다르게 취급되어 그 필요성이 없습니다.

대신 INotifyPropertyChanged을 구현하는 뷰 모델 기본 클래스에서 파생시켜야하며 해당 값을 변경할 때 해당 속성의 값이 PropertyChanged으로 높아야합니다. 스택 오버플로에서이 작업을 수행하는 방법에 대한 많은 예제를 쉽게 찾을 수 있습니다.

public class CustomItem 
{ 
    public String Title { get; set; } 
    public ObservableCollection<string> Foo { get; set; } = new ObservableCollection<string>(); 

    public String SelectedFoo { get; set; } 
} 

XAML

<TabControl ItemsSource="{Binding Items}"> 
    <TabControl.ItemContainerStyle> 
     <Style TargetType="TabItem"> 
      <Setter Property="Header" Value="{Binding Title}" /> 
     </Style> 
    </TabControl.ItemContainerStyle> 
    <TabControl.ContentTemplate> 
     <DataTemplate> 
      <ComboBox ItemsSource="{Binding Foo}" SelectedItem="{Binding SelectedFoo}" /> 
     </DataTemplate> 
    </TabControl.ContentTemplate> 
</TabControl> 
:하지만 지금, 여기 당신이 이동거야 코드에 몇 가지 빠른 변경 사항은
관련 문제