2012-09-14 24 views
1

我有一个TabControl其中每个TabItem显示一个ListView。 该列表对于每个选项卡都是相同的,但根据所选的选项卡,它会根据不同的字段进行排序。TabControl与ListView

所以,我不想每个TabItem包含不同ListView

<TabControl> 

    <TabItem> 
     <ListView/> 
    </TabItem> 

    <TabItem> 
     <ListView/> 
    </TabItem> 

</TabControl> 

我怎样才能做到这一点?

+1

“所以,我不希望每个TabItem的包含不同的ListView” - 为什么不呢?不应该有任何开销,所以保持简单和直接。 –

+0

不知道我是否理解你的问题。但是您可以将ListView放入DataTemplate并将ContentControl放入TabItem中,现在ContentControl只使用创建的DataTemplate作为其ContentTemplate。这样你可以重用listview的定义。显然它不可能是一样的。 – dowhilefor

+0

@HenkHolterman你确定吗? – gliderkite

回答

2

快速简单。让代码与现在一样。然后在您的ViewModel上只有一个列表,并且您可以拥有N个不同的只读属性(其中N是制表符的数量),这些属性将返回相同的列表,但按照您希望的顺序排序。

的事情是:

我不希望每个TabItem的包含不同的ListView

但是,这正是你在做什么。在每个TabItem中有一个排序不同的列表。

查看:

<TabControl> 
    <TabItem> 
     <ListView ItemsSource="{Binding SortedByX}" /> 
    </TabItem> 
    <TabItem> 
     <ListView ItemsSource="{Binding SortedByY}" /> 
    </TabItem> 
    <TabItem> 
     <ListView ItemsSource="{Binding SortedByZ}" /> 
    </TabItem> 
</TabControl> 

视图模型:

public List<The type of your list items> List { get; set; } 

public List<The type of your list items> SortedByX 
{ 
    get 
    { 
     return List.Sort(iComparer); 
    } 
} 

// Or using LINQ 

public List<The type of your list items> SortedByY 
{ 
    get 
    { 
     return List.OrderBy.... 
    } 
} 
+0

你能举一个例子来澄清你的意思吗? – gliderkite

+0

@gliderkite查看修改。 –