1

WPF 新手,正在尝试做一些基本的事情(我认为!)。我有一个 TabControl 和一个 ListBox 显示哪些 tabitems 是打开的:

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

是否可以绑定到特定的 tabitem(tabitem2 和 tabitem3)而不是整个 tabcontrol?原因是第一个 tabitem1 是一个欢迎选项卡,我不希望它显示在列表框中。

更新:

有人会这么好心地发布一些关于如何使用 IValueConverter 隐藏/过滤 tabitem 的代码吗?我一直在寻找几个小时没有运气。非常感谢!

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>

如果您愿意修改您的方法,您可以将其绑定ListBox.ItemsSourceICollectionView,然后使用该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

您必须过滤掉欢迎选项卡,因此您需要在CollectionView上添加一个过滤器,而不是绑定到您要绑定到 collectionview 的选项卡控件的项目。

尽管 ValueConverter 可能会起作用,但我认为这是一种 hack。

于 2011-01-28T20:14:35.240 回答
0

您可以将转换器添加到 ItemSource,然后在转换器中删除欢迎页面或进行任何您想要的更改。

于 2011-01-28T20:16:00.700 回答
0

我建议不要这样做。使用公共数据源来代替 Listbox 和 Tabcontrol。

要过滤/拦截任何数据绑定,您可以使用 IValueConverter。

于 2011-01-28T20:16:38.070 回答