Xaml 查找编辑多对多
我有这种关系: 产品o--oXaml 查找编辑多对多,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
<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;
}