0

我有 WPF 工具包中的 IntegerUpDown,并且喜欢将其绑定到实体框架中的自动生成的集合(EntityCollection)。

我的意图:我有这个 UpDown 控件来更改集合中的项目数。

我能够使用转换器在 IntegerUpDown 处显示计数,但不能更改集合中的项目数,因为我无法控制 ConvertBack() 函数中的集合 - 使用 IValueConverter 接口。

编辑:

但是我不能使用转换器来准确地解决这个问题。因为在 ConvertBack() 中,模型中的集合将被修改后的转换器类覆盖。这在 EF 中是不可能的。我必须直接使用 EF 中的模型,修改项目。

4

2 回答 2

2

具有可设置计数的集合?这很不寻常!无论如何,您要做的是MyCollectionCount向您的视图模型添加一个属性并绑定到该属性:

public int MyCollectionCount
{
    get { return Model.MyCollection != null ? Model.MyCollection.Count : 0 ; }
    set { if    (Model.MyCollection != null)  
                 Model.MyCollection.Count = value ; /* ¬_¬ */ }
}
于 2013-09-11T20:31:08.653 回答
1

如果您的控件正在使用数据绑定,则可以将其作为参数传递给转换:

<IntegerUpDown  Value="{Binding MyCollection,
                Converter={StaticResource CollectionConverter},
                ConverterParameter=MyCollection}" />

并将其用作您的转换器:

public class UpDownConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        ICollection<Type> col = (ICollection<Type>)value;

        return col.Count;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        ICollection<Type> col = (ICollection<Type>)parameter;

        // Do manipulation here
    }
}

有关 Xaml 中的转换器的更多信息,请查看 MSDN

于 2013-09-11T19:53:29.917 回答