2012-10-09 98 views
0

我在窗體中使用Silverlight的工具包AutoCompleteBox控件,我希望它顯示綁定到SelectedItem的值,或者它是null,然後顯示綁定到Text屬性的值。Silverlight自動完成框顯示SelectedItem或文本

問題是,當SelectedItem爲null時,它會自動清除Text屬性,即使它綁定到具有值的VM屬性。

這裏是一些XAML:

全部採用文本和性能的SelectedItem捆綁在一起的
<c:AutoCompleteBox 
      MinimumPopulateDelay="500" 
      ItemsSource="{Binding SuburbSearchResults}" 
      SelectedItem="{Binding SelectedSuburb}" 
      Text="{Binding SuburbText, Mode=OneWay}" 
      MinimumPrefixLength="3" /> 

回答

0

第一?也許這不是一個好主意。

當你在SelectedItem上使用綁定時,它爲你管理Text屬性值時的權利。

如果您使用ViewModel,我建議您綁定AutocompleteBox的一個屬性,並使用SuburbText prop。在VM中。 (或只是綁定的SelectedItem,你可以使用ValueMemberPath它)

編輯1:

//Suppose myVM.SuburbText is a local variable in VM, this shows Text prp. binding 
//But I prefer Object binding with ValueMemberPath,you may use one of them 
//But not both together 

public string TextWillBeBound 
{ 
    get 
    { 
    if(SearchResults.SelectedItem!=null) 
    { 
     myVM.SuburbText=SearchResults.SelectedItem.TextProperty; 
    } 
    else if(myVM.SuburbText="") 
{ 
    myVM.SuburbText="Please write..."; 
} 
    return myVM.SuburbText; 
} 
set 
{ 
    if(SearchResults.SelectedItem==null)  
    { 
    myVm.SuburbText=value; 
    //with value you may create Suburb object ? and set as Selected. 
    //Depending on what you aim. I suggest using SelectedItem & ValueMemberPath 
    } 
} 
} 

//我怎麼會用這個控制

前//你也可以綁定的SelectedItem和使用ValueMemberPath,如下所示。

<sdk:AutoCompleteBox MinimumPopulateDelay="500" MinimumPrefixLength="3" 
        Populating="AutoCompleteBox_Populating" 
        SelectedItem="{Binding Path=SELECTEDITEM,Mode=TwoWay}" 
        ValueMemberPath="DESCRIPTION"> 
+0

我使用的是虛擬機,需要有兩個屬性是因爲用戶應該可以,如果他想進入一個自由文本和autocompletbox應顯示SuburbText如果SelectedSuburb == NULL。 – Bishoy

+0

我編輯了我的帖子,TextWillBeBound將會在你的虛擬機的公共屬性中綁定到Text屬性。你也可以使用TwoWay –