Xaml 查找编辑多对多

Xaml 查找编辑多对多,xaml,many-to-many,devexpress,bind,Xaml,Many To Many,Devexpress,Bind,我有这种关系: 产品o--oo--o类别 要显示给用户的类别信息:Name 此信息从数据库正确加载到模型(EF Core 2)。我无法解决的问题是使用LookUpEdit为产品选择不同类别,并在文本控件中显示此选择。当然,我需要首先向用户显示所有类别,但在选择产品时,我还需要加载先前数据库保存的产品类别 然后基本问题是,我尝试使用一个标准(product.ProductCategory.Category),但LookUpEdit一开始就绑定了所有类别: 查找编辑XAML代码: <dxg:L

我有这种关系:

产品o--oo--o类别

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

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

然后基本问题是,我尝试使用一个标准(product.ProductCategory.Category),但LookUpEdit一开始就绑定了所有类别:

查找编辑XAML代码:

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

和类别转换器代码:

公共类CategorYConverter:MarkupExtension,IValueConverter { 公共类别转换程序(){}

公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性) { if(值!=null) { 如果(值为ObservableHashSet) { ObservableHashSet ProductCategories=作为ObservableHashSet的值; 返回新列表((ProductCategory.Select(c=>c.Category)); } } 返回null; } 公共对象转换回(对象值、类型targetType、对象参数、CultureInfo区域性) { 返回值; } 公共覆盖对象ProviderValue(IServiceProvider服务提供程序) { 归还这个; } }
我可以加载producselected类别,但无法解析用户何时从lookupedit中选择类别。它无法正确绑定到lookupedit。所以我不能同时使用这两种解决方案。

最后我发现了问题:当用户从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;
    }
public object ConvertBack(对象值、类型targetType、对象参数、文化信息文化)
{
IList map=作为IList的值;
ObservableHashSet pc=新的ObservableHashSet();
foreach(映射中的var m)
{
pc.Add(newproductcategory(){Category=m as Category});
}
返回pc;
}
希望这对别人有帮助

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