2013-10-04 40 views
1

我想使用組合框來顯示聯繫人3,或者如果聯繫人3爲空,則爲空。WPF組合框綁定:記住上一個值而不是顯示空值

我的ViewModel有一個CurrentSample屬性,它是包含下面控件的堆棧面板的DataContext。

當CurrentSample.Contact3!= null時,綁定工作正常。

當CurrentSample更改爲帶有Contact3的樣本== null時,TextBox綁定可以正常工作,但ComboBox會記住最後一個非null值。

我試着創建一個簡單的例子來演示行爲,但工作正常!在我的簡單示例中,當CurrentSample.Contact3 == null時,組合框爲空。

我的完整程序使用EF代理。當它即將出錯時,綁定輸出會告訴我,我的DataObject是一個代理。

我試過讓OurPeople2有一個集合和一個CollectionViewSource,並且有和沒有空條目。

請記住,只有你可以從(其它)醜雜牌......尼克保存這個項目(在.NET 4.5)

<TextBox Text="{Binding Path=Contact3.Surname, Mode=OneWay}"/> 

<ComboBox 
    ItemsSource="{Binding Source={StaticResource Locator}, Path=Main.OurPeople2}" 
    SelectedItem="{bindings:ChilliBinding Path=Contact3}" 
    DisplayMemberPath="Surname" 
    IsSynchronizedWithCurrentItem="True" /> 

確定。問題是這樣的。 ChilliBinding是一個包括幾個參數的便利課程。

public class ChilliBinding:Binding 
{ 

    public ChilliBinding():base() 
    { 
     Mode=BindingMode.TwoWay; 
     UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 
     ValidatesOnDataErrors = true; 
     NotifyOnValidationError = true; 
     TargetNullValue = ""; 
    } 
} 

TargetNullValue允許用戶在文本框中提供一個空字符串來指定空值。不適用於CombobBox。也許綁定嘗試將viewmodel中的空值轉換爲「」,然後在組合框中找不到該值。

我已經介紹了一個新的便捷類ChilliBindingForCombo,它使TargetNullValue未設置。順便說一句,將組合值設置爲空,我不需要在組合框中有一個空值,因爲我有一個UserControl,其中包含一個標籤,組合框和一個「設置組合框爲空」按鈕。

回答

0

使用FallbackValue這樣的:<TextBox Text="{Binding Path=Contact3.Surname, Mode=OneWay}, FallbackValue={x:Null}"/>

好運。

+0

謝謝,但沒有奏效。順便說一句,CollectionViewSource.CurrentItemChanged處理程序沒有被調用,所以它甚至沒有告訴組合框更改它的項目。我也有一個「將聯繫人3設置爲空」按鈕。這確實會更改屬性,TextBox更新,但不會更改組合框。 – ajd

+0

AAGH。我在ChilliBinding中使用了TargetNullvalue。這允許用戶清除文本框中的值,但似乎不適用於組合框。感謝您的關注,這促使我更仔細地看待...... – ajd

+0

不錯!不僅僅是告訴你如何去做,而是你自己做! – Tico

相關問題