2014-02-06 82 views
2

我有一個組合框,其中包含我的應用程序中定義的每個FilterViewModel的項目。每個FilterViewModel都有一個DisplayName屬性,其中包含過濾器的名稱。當前選擇的過濾器實例保存在SelectedFilter屬性中。更改組合框文本,但未選擇項目

我希望用戶能夠從下拉列表中選擇現有的項目,但也可以在文本框中更改所選過濾器的名稱。輸入其他名稱不得改變項目選擇。總是選擇一個過濾器,但不能選擇沒有過濾器。

這裏是XAML代碼:

<ComboBox 
    IsEditable="True" IsTextSearchEnabled="False" 
    ItemsSource="{Binding Filters}" 
    SelectedItem="{Binding SelectedFilter}" 
    DisplayMemberPath="DisplayName"/> 

我找不到對ComboBox一個TextChanged事件,索性讓它原樣不改變所選項目的綁定文本屬性,顯示名稱(I」 d已經預料到了)。

我能做些什麼才能像上面描述的那樣工作?

背景是,此ComboBox用於我的應用程序的設置對話框中,可以管理(創建,複製,重命名,刪除)過濾器,並且可以編輯它們的過濾條件。我想省下額外的按鈕和窗口或TextBox來重命名過濾器,但直接就地提供該功能。您會看到過濾器名稱,只需點擊它並鍵入即可更改過濾器名稱。但我也想使用組合框有一個下拉選擇菜單來切換過濾器。

回答

3

這應該允許您更改SelectedFilterDisplayName不改變SelectedFilter本身:

<ComboBox 
    ItemsSource="{Binding Filters}" 
    SelectedItem="{Binding SelectedFilter}" 
    DisplayMemberPath="DisplayName" 
    Text="{Binding SelectedFilter.DisplayName, Mode=TwoWay}" 
    IsEditable="True" 
    IsTextSearchEnabled="False"/> 
+0

太好了!簡單有效的解決方案。這裏有一些代碼將選擇ComboBox中的所有文本。它可以連接SelectionChanged事件:http://stackoverflow.com/a/2151815/143684 – ygoe

+0

非常感謝這一點。我在測試它的時候發現了一些東西,如果IsTextSearchEnabled爲true,SelectedFilter在更改DisplayName時將更改爲null,所以我在設置的分支上的屬性中添加了一個額外的檢查:if(value!= null) { _SelectedFilter =值; PropertyChanged(this,new PropertyChangedEventArgs(「SelectedFilter」)); }。現在它適用於我的場景,如果沒有您的示例,我無法到達這裏。 –

相關問題