【问题标题】:why WPF combobox itemssource converter gets whole collection and not items?为什么 WPF 组合框项目源转换器获取整个集合而不是项目?
【发布时间】:2016-01-10 18:49:21
【问题描述】:

当我使用以下实现进行调试时。 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}" /> 

视图模型

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");
        }
    }
}

【问题讨论】:

    标签: c# wpf data-binding


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!我确信我以前也这样做过。嗯... +1 是唯一明智的答案:“因为这就是转换器的工作方式”:)
    • @charm 请记住,您可能需要 OneWay 绑定,具体取决于您的 ItemSource 属性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    相关资源
    最近更新 更多