【问题标题】:WPF Binding a int to collectionWPF将int绑定到集合
【发布时间】:2013-09-11 19:35:47
【问题描述】:

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

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

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

编辑:

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

【问题讨论】:

  • 如果在 ConvertBack 期间无法控制集合,那么在 ConvertTo 期间如何控制?
  • 在 Convert(object value, Type targetType ... 我从第一个参数 ICollection collection = (ICollection)value;

标签: c# wpf entity-framework binding


【解决方案1】:

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

public int MyCollectionCount
{
    get { return Model.MyCollection != null ? Model.MyCollection.Count : 0 ; }
    set { if    (Model.MyCollection != null)  
                 Model.MyCollection.Count = value ; /* ¬_¬ */ }
}

【讨论】:

  • 谢谢,这正是我需要的代码!计数也不能设置,但我用虚拟实例填充它。
【解决方案2】:

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

<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 中的转换器的更多信息,check out the MSDN

【讨论】:

  • 感谢您的回答,之前尝试过。您不能通过 ConverterParameter 传递值。但是,我找到了一种简单的方法,可以将集合保存在类中的 Convert-method 中,并在 ConvertBack 中使用它,但是实体框架也存在一些问题。但是我不知道这个转换器如何在内部工作。将其保存在转换点可能不是一个好主意。
  • 我建议不要在转换器中保存对集合的引用,因为您永远不知道可能从哪里调用转换器并且您不希望有一些悬挂引用。但是,如果您解决了自己的问题,请在此处发布您的答案,以便其他人看到!
  • 它解决了在 ConvertBack() 访问集合的问题,但这导致了另一个问题,我现在使用 EF。 EF 不喜欢覆盖集合(通过集合)——相反,我必须直接在这个模型上工作。也许我的问题应该更多是如何不使用转换器来解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
相关资源
最近更新 更多