2009-09-21 29 views
1

我有一个Silverlight测试项目在那里我返回一个列表< ProductInfo> ...AutoCompleteBox不保留文本

public class ProductInfo 
{ 

    public override string ToString() 
    { 
     return Name + " - " + Description; 
    } 

    public string Name { get; set; } 
    public string Description { get; set; } 
} 

它成功返回的名称和描述与下面的DataTemplate定制AutoCompleteBox定义:

<DataTemplate x:Key="SearchBoxDataTemplate"> 
    <StackPanel Orientation="Vertical" HorizontalAlignment="Right" Margin="0, 0, 8, 0"> 
     <TextBlock HorizontalAlignment="Right" Foreground="Blue" 
      FontSize="18" Text="{Binding Name}" Padding="2" /> 
     <TextBlock HorizontalAlignment="Right" Foreground="Black" 
      FontSize="8" Text="{Binding Description}" Padding="2" /> 
    </StackPanel> 
</DataTemplate> 

然而,一旦一个项目被选择时,AutoCompleteBox填充与该对象类型(由WCF服务返回)的名称...

IdeasAndTesting_SL_01.ServiceReference1.ProductInfo 

你会注意到我覆盖了ProductInfo对象的ToString()方法,所以我不确定为什么这样做或如何解决它。想法?

回答

2

您的ProductInfo和服务参考实际上可能是不同的对象。

考虑将AutoCompleteBox上的ValueMemberPath或ValueMemberBinding属性设置为属性(例如DisplayText,它返回相同的Name +“ - ”+ Description)。

value成员属性将始终在对象的ToString上受到尊重。

2

使您的ProductInfo的部分类具有与生成的服务代理类相同的名称空间,并覆盖其中的ToString()。

+0

+1,markti的答案就是我领导的地方:-) – 2009-09-23 18:25:38