我有一個列表視圖(在擴展選擇模式,並與當前項目同步)和一個文本框。該文本框允許用戶輸入搜索條件。在列表框的TextChanged事件中,我將搜索條件與列表視圖中listviewitems的名稱進行匹配,並相應地設置selectedindex。這是爲了突出它,並提供一個簡單的選擇點,從中選擇更多的點。見下面的代碼:WPF列表視圖選擇問題
void searchTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
try
{
TextBox textBox = (TextBox)sender;
if (textBox != null)
{
string text = textBox.Text;
if (text != string.Empty)
{
for (int i = 0; i < listViewPerson.Items.Count; i++)
{
Person person = (Person)listViewPerson.Items[i];
if (person != null)
{
if (person .Name.StartsWith(text, StringComparison.OrdinalIgnoreCase))
{
listViewPerson.SelectedIndex = i;
listViewPerson.ScrollIntoView(routePoint);
break;
}
}
}
}
else
{
listViewPerson.SelectedIndex = -1;
}
}
}
catch (Exception Caught)
{
Log.AddExceptionEntry(this, "Could not search ", Caught, Log.Target.All,
Log.EntryType.Error);
}
}
搜索和選擇工作得很好。在第一次嘗試時,用戶可以選擇第二個點(第一個點已經由搜索選擇)並從第一個點開始多選,而沒有問題。
然而,第二次循環時,listview繼續從第一次搜索(它最初由搜索例程設置)中「記住」第一個選定點,因此導致選擇從錯誤的地方開始(即使selectedIndex是正確設置爲列表視圖中的新項目)。
但是,鼠標單擊selectedindex然後導致選擇點被重置爲正確。與使用手動點擊相比,似乎selectedindex在代碼中的工作方式不同。
我試過使用listViewTrainServiceHelperPattern.SelectedItems.Clear(),SelectedValue(object)而不是SelectedIndex,但都無濟於事。有沒有人有任何想法是什麼造成這一點,以及如何解決它?
我已經讀過幾遍,但對於一些缺失的信息還是有點困惑。選擇第二個「點」意味着什麼,以及「第二次圍繞列表視圖」開始的是什麼行動或事件。如果選擇了多個項目,'selectedindex'將返回第一個選擇的索引,而不是最近選擇的索引。但是,從您的問題來看,我無法分辨您的搜索引擎第一次運行和「第二次」之間會發生什麼。所有項目都被清除了嗎,你是否執行定製邏輯......? – Scott 2010-07-16 14:03:07
什麼是'routePoint'?看起來這可能跨越這個事件的調用。此外,這段代碼對我來說看起來不是很「MVVM」,因爲它具有代碼隱藏的視圖邏輯,而不是視圖模型。如果您在使用MVVM實時處理'TextChanged'時遇到問題,請在您的綁定中嘗試以下操作:'UpdateSourceTrigger = PropertyChanged' – 2011-06-27 01:18:36
糟糕,抱歉給necro :) – 2011-06-27 01:20:34