LookUpEdit多对多

时间:2018-08-16 17:22:30

标签: xaml many-to-many devexpress bind

我有这种关系:

产品o --- o <产品类别> o --- o类别

要显示给用户的类别信息:名称

此信息已从数据库正确加载到模型(EF Core 2)。我无法解决的问题是使用LookUpEdit为产品选择不同的类别,并在文本控件中显示此选择。当然,我需要先向用户显示所有类别,但是当选择产品时,我也需要加载以前保存的数据库的产品类别。

那么本质的问题是我尝试使用一个条件(product.ProductCategory.Category),但是LookUpEdit在一开始就绑定了所有类别:

LOOKUPEDIT XAML代码:

id: nfs-server
kind: Service
apiVersion: v1beta1
port: 2049
protocol: tcp
selector:
  name: nfs-server

和类别转换器代码:

公共类CategorYConverter:MarkupExtension,IValueConverter     {         公共CategorYConverter(){}

<dxg:LookUpEdit ItemsSource="{Binding Categories}" IsTextEditable="False"  EditValue="{Binding Product.ProductCategories, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource CategoryConverter}}">

我可以加载产品选择的类别,但是当用户从lookupedit中选择一个类别时,我无法解析。它没有正确绑定到lookupedit。所以我不能同时使用这两种解决方案。

1 个答案:

答案 0 :(得分:0)

最后我发现了问题:当用户从lookupedit类别控件中选择类别时,将调用ConvertBack函数。因此,我只需要将收到的数据“转换”为需要EditValue绑定的数据:Product.ProductCategories。完全相同的格式,在我的情况下是ObservableHashSet

 public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {

        IList<object> map = value as IList<object>;
        ObservableHashSet<ProductCategory> pc = new ObservableHashSet<ProductCategory>();

        foreach (var m in map)
        {
            pc.Add(new ProductCategory() { Category = m as Category });                
        }

        return pc;
    }

希望这对某人有帮助