1

WPFは初めてで、基本的なことをしようとしています(私は思います!)。開いているタブアイテムを表示するTabControlとListBoxがあります。

<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>

tabcontrol全体ではなく、特定のtabitem(tabitem2およびtabitem3)にバインドすることは可能ですか?理由が最初のtabitem1はウェルカムタブであり、リストボックスに表示されたくありません。

アップデート:

IValueConverterを使用してタブアイテムを非表示/フィルタリングする方法に関するコードを投稿してくれる人はいますか?私は運がないまま何時間も探していました。大変感謝します!

4

4 に答える 4

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
}
于 2011-01-28T20:16:42.260 に答える
0

ウェルカムタブをフィルターで除外する必要があるため、コレクションビューにバインドするタブコントロールのアイテムにバインドする代わりに、コレクションビューにフィルターを追加する必要があります。

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

于 2011-01-28T20:14:35.240 に答える
0

ItemSourceにコンバーターを追加してから、コンバーターでウェルカムページを削除するか、必要に応じて変更を加えることができます。

于 2011-01-28T20:16:00.700 に答える
0

これを行わないことをお勧めします。代わりに、リストボックスとタブコントロールの両方で共通のデータソースを使用してください。

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

于 2011-01-28T20:16:38.070 に答える