2017-11-30 10 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"} } }; 

私はpopulしたい上で定義したコンボボックスをFoo要素で食べたので、 "foo1"と "foo2"を見たいと思います。 実は、私は何も見えませんでした。私はそれがDataContext問題だと思うので、私は次のコードを使用してみてくださいが、何も起こりません:

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

私は私の問題を解決する可能性がどのように?

答えて

1

XAMLはかなり上手ですが、からCustomItemを派生させるべきではありません。それは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> 
:しかし、今のところ、ここにあなたが移動を取得よ、あなたのコードにいくつかの簡単な変更があります
関連する問題