2011-04-10 76 views
1

我正在創建一個自定義列表視圖標題,該標題包含標題文本,但也有一個可以輸入以過濾該列內容的文本框。我的代碼目前看起來像這樣:將ListView的標題數據模板中的文本框綁定到篩選器屬性

<UserControl.Resources> 
     <DataTemplate x:Key="myHeaderTemplate"> 
      <StackPanel> 
       <TextBlock FontSize="14" Foreground="DarkBlue" Margin="20,4" Text="{Binding}" /> 
       <TextBox Text="" Margin="4,2" /> 
      </StackPanel> 
     </DataTemplate> 
</UserControl.Resources> 

這是包含texbox的標頭datatemplate的定義;和列表視圖

<ListView ItemsSource="{Binding Path=MyData}" IsSynchronizedWithCurrentItem="True"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Last Name" HeaderTemplate="{StaticResource myHeaderTemplate}" 
          DisplayMemberBinding="{Binding Path=Something}" /> 
      <GridViewColumn Header="First Name" HeaderTemplate="{StaticResource myHeaderTemplate}" 
          DisplayMemberBinding="{Binding Path=Something}" /> 
      <GridViewColumn Header="Address" HeaderTemplate="{StaticResource myHeaderTemplate}" 
          DisplayMemberBinding="{Binding Path=Tube}" /> 
     </GridView> 
    </ListView.View> 
</ListView> 

我希望能夠建立起來,我可以申請到ListView行,但要做到這一點我必須從標題模板每個過濾器的文本框獲取數據篩選語句。

我可以以某種方式將標題中的文本框綁定到我的viewmodel上的屬性嗎?如果沒有,還有其他方法來獲取文本?

感謝您的任何幫助。

回答

2

你應該能夠標題綁定到一個屬性是這樣的:

<GridViewColumn 
    Header="{Binding LastNameFilter, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}}" 
    HeaderTemplate="{StaticResource myHeaderTemplate}" 
    DisplayMemberBinding="{Binding Path=Something}" /> 

需要的RelativeSource去的ListViewDataContext - 你也可以給它一個名稱,並使用ElementName代替。

現在你可以做一個HeaderFilter類:

public class HeaderFilter 
{ 
    public string Name { get; set; } 
    public string Filter { get; set; } 
} 

很明顯,你需要擴展該類時Filter改爲進行濾波,掛鉤到事件。

把一個屬性爲對象的每個列標題這是DataContextListView(提供MyData大概相同的對象)

public class SomeClass 
{ 
    .... 
    public HeaderFilter LastNameFilter { get; set; } 
    .... 
} 
+0

+1正要張貼類似的東西 – 2011-04-10 08:20:51

+0

馬斯亮回答ChrisWue,那只是門票。非常感謝這個偉大的解釋! – TripleAntigen 2011-04-10 08:35:43

+0

ChrisWue我想你的建議,我難以理解你上面使用的約束力的聲明,特別是 標題= 「{結合LastNameFilter,的RelativeSource = {的RelativeSource FindAncestor,AncestorType = {X:類型的ListView}}}」 – TripleAntigen 2011-04-10 13:11:36

相關問題