在WPF中将静态项添加到RadComboBox

时间:2016-10-13 13:59:01

标签: c# wpf xaml telerik

我有一组两个级联RadComboBoxes - 当一个设置时,另一个填充。第二个组合框的ItemSource设置为CompositeCollection,它与视图模型中的ObservableCollection绑定。

我试图在列表中添加静态值。我们的想法是CompositeCollection可以改变,但应该总有一个静态ComboBoxItem名为 Other

CustomerContact.cs:

public class CustomerContact
{
    public string Name { get; set; }
    public string Email { get; set; }
    public string Phone { get; set; }
}

CustomerContactSource:

<CollectionViewSource x:Key="CustomerContactSource" Source="{Binding CustomerSite.CustomerContacts}">
    <CollectionViewSource.SortDescriptions>
        <scm:SortDescription PropertyName="Name"/>
    </CollectionViewSource.SortDescriptions>
</CollectionViewSource>

OtherCustomerContact:

public CustomerContact OtherCustomerContactItem => new CustomerContact
{
    Name = "Other", 
    Email = string.Empty, 
    PhoneNumber = string.Empty 
};

Xaml页面:

<telerik:RadComboBox ItemTemplate="{StaticResource ComboBoxItemTemplate}"
                     SelectedItem="{Binding CustomerContact}"                                                     
                     Text="{Binding Source=CustomerContact, Path=Name}">
    <telerik:RadComboBox.ItemsSource>
        <CompositeCollection>
            <CollectionContainer Collection="{Binding Source={StaticResource CustomerContactSource}}"/>
            <TextBlock Text="{Binding Source=OtherCustomerContactItem, Path=Name}"/>                                                          
        </CompositeCollection>                                   
    </telerik:RadComboBox.ItemsSource>
</telerik:RadComboBox>

我一直收到一条错误消息,指出没有找到TextBlock到CustomerContact的转换器。我究竟做错了什么? RadComboBox有一个ItemSource,它包含CustomerContact列表和一个不变的项目, 类型为CustomerContact

任何帮助都将非常感谢!!!

1 个答案:

答案 0 :(得分:1)

  

RadComboBox有一个ItemSource,它是CustomerContact和的列表   一个单一的,不变的项目,也是CustomerContact类型。

最后一部分并不成立。您正在将项目包装在TextBlock中 XAML看到的类型。由于缺少TypeConverter而导致错误。

你可以包装该项目:

  • 在自己的Collection(容器)中。
  • 在RadComboBoxItem中的行是什么 对于ListBox已完成here