Skip to main content
 首页 » 编程设计

c#之为什么 WPF 组合框项目源转换器获取整个集合而不是项目

2024年02月05日29findumars

当我使用以下实现进行调试时。 Convert-method 参数值有所有值,自然转换失败。

XAML

<UserControl.Resources> 
    <appconv:CustomerNumberToStringConverter x:Key="customernumbertostringconverter" /> 
</UserControl.Resources> 
<!-- ... --> 
<ComboBox Grid.Row="4" Grid.Column="0" ItemsSource="{Binding CustomerSearchNumbers, Converter={StaticResource customernumbertostringconverter}}" SelectedItem="{Binding Path=SelectedCustomerSearchNumber, Mode=TwoWay}" />  

View 模型

public enum CustomerIdentifier 
{ 
    ClientPointNo = 0, 
    ClientNo = 1, 
    MeterNo = 2, 
    CustPointNo = 3 
} 
 
 
public ObservableCollection<CustomerIdentifier> CustomerSearchNumbers { get; private set; } 
 
CustomerSearchNumbers = new ObservableCollection<CustomerIdentifier>((IEnumerable<CustomerIdentifier>)Enum.GetValues(typeof(CustomerIdentifier))); 

转换器

public class CustomerNumberToStringConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, 
        object parameter, System.Globalization.CultureInfo culture) 
    { 
        var enumValue = (CustomerIdentifier)value; 
        switch (enumValue) 
        { 
            case CustomerIdentifier.ClientPointNo: 
                return XxxUtility.GetString("strclientpointno"); 
            case CustomerIdentifier.ClientNo: 
                return XxxUtility.GetString("strclientno"); 
            case CustomerIdentifier.MeterNo: 
                return XxxUtility.GetString("strmeterno"); 
            default: 
                return XxxUtility.GetString("strcustomerpointno"); 
        } 
    } 
} 

请您参考如下方法:

因为这就是转换器的工作方式 - 它允许您转换绑定(bind)中的源项,在本例中为 CustomerSearchNumbers。如果要转换 ComboBox 中的每个单独项目,则需要指定使用转换器的自定义 ItemTemplate:

<ComboBox ItemsSource="{Binding CustomerSearchNumbers}"> 
  <ComboBox.ItemTemplate> 
    <DataTemplate> 
      <TextBlock Text="{Binding Converter={StaticResource customernumbertostringconverter}"/> 
    </DataTemplate> 
  </ComboBox.ItemTemplate> 
</ComboBox>