2011-01-28 14 views
1

WPFの新機能は、何か基本的なことをしようとしています(私は思っています!)。WPFのListBoxとTabItemのバインド

<ListBox Width="170" Height="188" ItemsSource="{Binding Items, ElementName=tabControl}" Name="ListTabs" Canvas.Left="0" Canvas.Top="27"> 
      <ListBox.ItemContainerStyle> 
       <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}"> 
        El 
       </Style> 
      </ListBox.ItemContainerStyle> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Header}"/> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

それは特定のtabitems(tabitem2とtabitem3)のではなく、全体のTabControlにバインドすることは可能です:私はTabControlのとtabitemsが開いているかを示し、リストボックスがありますか?理由は最初のtabitem1は歓迎タブであり、私はそれをリストボックスに表示させたくありません。

UPDATE:

は、誰かが/非表示のTabItemをフィルタリングするIValueConverterを使用する方法についていくつかのコードを投稿するとても親切だろうか?私は運がない時間を探しています。とても感謝しています!

+0

私はViewModelと2つの異なるプロパティを使用します。別の方法は、DataTriggerを使用して特定の条件でVisibility = CollapsedをListBoxItem ControlTemplate内に設定することです。しかし、この解決策は良いとは思われません。 – vorrtex

答えて

1

現在の設定では、唯一の方法はIValueConverterで実行することです。あなたのアプローチを変更して喜んでいた場合は

<Window.Resources> 
     <converters:StripOutFirstTabConverter x:Key="StripOutFirstTabConverter"/> 
    </Window.Resources> 

    <ListBox Width="170" Height="188" ItemsSource="{Binding Items, ElementName=tabControl, Converter={StaticResource StripOutFirstTabConverter}}" Name="ListTabs" Canvas.Left="0" Canvas.Top="27"> 
      <ListBox.ItemContainerStyle> 
       <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}"> 
        El 
       </Style> 
      </ListBox.ItemContainerStyle> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Header}"/> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
    </ListBox> 

あなたはICollectionViewListBox.ItemsSourceをバインドし、Filter財産を利用することができます。

public ICollectionView Tabs 
{ 
    get 
    { 
     if (_view == null) 
     { 
      _view = CollectionViewSource.GetDefaultView(tabControl.Items); 
      _view.Filter = Filter; 
     } 

     return _view; 
    } 
} 

private bool Filter(object arg) 
{ 
    //arg will be a TabItem, return true if you want it, false if you don't 
} 
+0

多くのお返事いただきありがとうございます。私はIValueConverterの実装方法について少し研究します。よろしく! –

+0

ちょうどこのプロジェクトに戻り、ivalueconverterのコードを投稿できるかどうか疑問に思っていますか?私はtabitemやタブヘッダーとは関係なく、多くの運がないといくつかのサンプルをオンラインで見つけることを試みてきました。どうもありがとう! –

+0

@ Easton Ronaldo IValueConverterの仕組みを理解していれば、それはかなり簡単です。フィルタリングのコードはすでにあなたのために嘲笑されています。私の答えのさまざまなリンクを見直して、それが意味をなさないと賭けています。 –

0

ウェルカムタブをフィルタ処理して、CollectionViewにフィルタを追加する必要があります。コレクションビューにバインドするタブコントロールの項目にバインドするのではなく、

ValueConverterが機能するかもしれませんが、私はそれを一種のハックと考えています。

0

ConverterをItemSourceに追加し、コンバータでウェルカムページを削除するか、必要な変更を加えます。

0

私はこれをしないことをお勧めします。 ListboxとTabcontrolの両方ではなく、共通のデータソースを使用します。

データバインディングをフィルタリング/インターセプトするには、IValueConverterを使用できます。

関連する問題