【问题标题】:DisplayMember ComboBox For Which Contains List<Object> as item source包含 List<Object> 作为项目源的 DisplayMember ComboBox
【发布时间】:2019-05-29 18:44:15
【问题描述】:

Comobox 喜欢这个

 <dxe:ComboBoxEdit AutoComplete="True" IsTextEditable="False" ImmediatePopup="True" IncrementalFiltering="True" ItemsSource="{Binding Example}" />

在虚拟机中

 public List<object> Example
            {
                get { return example; }
                set { example = value; OnPropertyChanged(new PropertyChangedEventArgs("Example")); }
            }
   public List<ArticlesStock> ArticlesStockList
        {
            get { return articlesStockList; }
            set
            {
                articlesStockList = value;
                OnPropertyChanged(new PropertyChangedEventArgs("ArticlesStockList"));
            }
        }

  Example.Add(ArticlesStockList);

ArticlesStock 类中,我有 Prop Name Producer 一个字符串

如何在 ComboBox 中将此设置为我的路径? 通常我们可以用道具来设置它。但在这里我有一个列表。在里面我还有一个列表。在此列表中,必须设置第一项值。 C# 转换如何将其设置为显示成员

((List<ArticlesStock>)Example[0])[0].WarehouseDeliveryNoteItem.Producer;

【问题讨论】:

    标签: c# wpf mvvm


    【解决方案1】:

    我会执行以下操作:为您的组合框项目定义 DataTemplate,并使用转换器检索您需要的属性。

    数据模板定义:

    <ComboBox ItemsSource="{Binding Example}">
        <ComboBox.ItemTemplate>
            <DataTemplate DataType="{x:Type List}">
                <!--no Path is specified, which is equivalent to Path="."-->
                <TextBlock Text="{Binding Converter={StaticResource MyConv}}"></TextBlock>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>
    

    以及用来访问Producer属性的转换器:

    public class MyConv : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            // here value will be an item of Example list, so a List<ArticlesStock>
            var val = value as List<ArticlesStock>;
            return val[0].Producer;
        }
    }
    

    请注意,为简洁起见,我简化了您的模型结构。

    【讨论】:

    • 实际上,我放弃了这种方法并创建了适当的记录并使用它我认为这会起作用,但我不能使用它。我会得到一个循环依赖,[0].WarehouseDeliveryNoteItem.Producer 你可以在显示成员中这样使用,如果有人想知道加一个努力
    • 我认为在 ComboBox 中显示所选项目时会产生问题,我们也需要在那里维护一个模板。
    • 您也可以在那里使用转换器,但我认为更好的结构化模型(正如您在第一条评论中所做的那样)是最好的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 2021-04-15
    • 1970-01-01
    相关资源
    最近更新 更多