2011-11-22 98 views
2

我正在使用MVVM在ListView中顯示列表數據。 ListView控件是如下非常簡單:WPF ListView Key Search Issue

<ListView HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch" 
      ItemsSource="{Binding Customers}"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn DisplayMemberBinding="{Binding FirstName}"> 
        <GridViewColumnHeader Width="100" Content="First Name" /> 
       </GridViewColumn> 

       <GridViewColumn DisplayMemberBinding="{Binding LastName}"> 
        <GridViewColumnHeader Width="100" Content="Last Name" /> 
       </GridViewColumn> 
      </GridView> 
     </ListView.View> 

    </ListView> 

我綁定的客戶對象的列表到ListView和問題是當我強調在ListView一個項目,並開始鍵入T。每次鍵入T字符時,ListView將突出顯示下一個項目。

通過花一些時間來找出這個問題,我追查那是因爲我的客戶對象有命名空間TestMVVMProject所以我覺得ToString()功能爲客戶對象總是回TestMVVMProject.Customer

誰能給我一些想法如何阻止這種行爲?

+0

如果你的預感是正確的,在ListView上設置'DisplayMemberPath'來表示'LastName'將會「正常」工作。但是,您是否在尋找使用第一列的解決方案? – user7116

+0

是的,我正在尋找使用第一列的解決方案。我想要做的是在用戶鍵入一個鍵時突出顯示最佳匹配'FirstName'。但當「T」鍵入時有問題。謝謝 – Jing

回答

0

這是因爲默認情況下,ListView實現文本搜索能力。您可以通過使用列表框上的IsTextSearchEnabled屬性來阻止這種行爲。嘗試

<ListView HorizontalAlignment="Stretch" 
     VerticalAlignment="Stretch" 
     ItemsSource="{Binding Customers}" 
     IsTextSearchEnabled="False"> 

這應該禁用文本搜索,當你不需要它時。

+0

謝謝。這是我尋找的解決方案。 – Jing

0

編輯: 經過一番調查,我發現下一個解決方案:

<ListView 
    TextSearch.TextPath="FirstName" 
    ...> 

希望這會有所幫助。

原來的答覆:

在視圖模型只是覆蓋ToString(),你會得到正確的行爲。

public class Customer 
{ 
    public string Name { get; set; } 

    public override string ToString() 
    { 
     return this.Name; 
    } 
} 
+0

感謝您的回覆。但是重寫ToString()並不是這裏最好的解決方案。 – Jing

+0

@Jing我找到了解決方案。見編輯的答案。 –