Silverlight自动完成框显示SelectedItem或文本

时间:2012-10-09 02:46:24

标签: silverlight autocompletebox

我正在使用Silverlight的工具包AutoCompleteBox控件,我希望它显示绑定到SelectedItem的值,或者如果它为null,则显示绑定到Text属性的值。

问题是当SelectedItem为null时,它会自动清除Text属性,即使它绑定到具有值的VM属性。

这里有一些XAML:

<c:AutoCompleteBox
            MinimumPopulateDelay="500"
            ItemsSource="{Binding SuburbSearchResults}"
            SelectedItem="{Binding SelectedSuburb}"
            Text="{Binding SuburbText, Mode=OneWay}"
            MinimumPrefixLength="3" />

1 个答案:

答案 0 :(得分:0)

首先一起使用Text和SelectedItem属性绑定?也许这不是一个好主意。

在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">