2010-11-27 58 views
2

我正在考虑创建控件 - 正常的多行文本框,其中用户将用逗号分隔每个数字插入电话号码。自定义控件实体框架绑定

 
1111111111, 
2222222222, 
3333333333, 
4444444444, 
... 

我有实体用户和实体PhoneNumber。

现在我想将phoneNumber实体绑定到该控件。问题是我应该在这个控制中实现什么,以便它理解要绑定什么。例如,如果我将phoneNumber绑定到组合框.net知道如何在此控件上显示它,但是对于我的情况如何?

感谢您的任何帮助和提示如何开始创建这样的东西。

再见

+0

我刚刚在德尔福的Oracle讲话中提出了您的问题。她耸了耸肩,看着我这样说,当你认为自己说的是正确的话时,女人会这样做,但很可能会导致公司在未来20年内堕落。 – 2010-11-27 22:23:46

+0

hee .............? – gruber 2010-11-28 11:01:42

回答

1

,因为它适用于ComboBox做,你可以做,你要通过数据库的电话没有为数据源和数据成员属性,然后在你的代码回路。列,并在每个条目后用逗号将它们附加到文本框中。 我自己已经实现了类似的东西。

0

也许转换您的数据在呈现为用户的观点和转换回你的域将解决你的问题。 下面是我的示例代码,用于将Enumeration演示文稿转换为我的项目中的本地化资源: 虽然它不是一个优雅的代码,但也许可以解决您的问题。 在转换你可以拆分你的加入您的加入号码的汇编,并将其设置为您的控制和转换回用字符串拆分字符串,并建立您的收藏。

[MarkupExtensionReturnType(typeof (IValueConverter))] 
public abstract class ConverterMarkupExtension<T> : MarkupExtension where T : class, IValueConverter, new() 
{ 
    private static T _converter; 

    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     return _converter ?? (_converter = new T()); 
    } 
} 

public class EnumConverter<T> : ConverterMarkupExtension<EnumConverter<T>>, IValueConverter 
    where T : struct 
{ 
    #region Implemented Interfaces 

    #region IValueConverter 

    /// <summary> 
    /// convert from enum to string 
    /// </summary> 
    /// <param name = "value"></param> 
    /// <param name = "targetType"></param> 
    /// <param name = "parameter"></param> 
    /// <param name = "culture"></param> 
    /// <returns></returns> 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value == null) 
     { 
      return null; 
     } 

     string convert = typeof(GlossaryResources).GetProperty(value.ToString()).GetValue(null, null).ToString(); 

     return new Item { Name = value.ToString(), Value = convert }; 
    } 

    /// <summary> 
    /// convert from string to enum value 
    /// </summary> 
    /// <param name = "value"></param> 
    /// <param name = "targetType"></param> 
    /// <param name = "parameter"></param> 
    /// <param name = "culture"></param> 
    /// <returns></returns> 
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value == null) 
     { 
      return null; 
     } 

     T enumvalue; 
     Enum.TryParse(value.Cast<Item>().Name, out enumvalue); 
     return enumvalue; 
    } 

    #endregion 

    #endregion 
} 

public class GenderEnumConverter : EnumConverter<Gender> 
{ 
} 
0

您可以创建自己的TextBox自定义实现,该实现具有接受对象集合并包装Textbox的'Lines'属性的属性。像这样的事情(假设NumberText是暴露实际文本的字段的名称):

public class NumberBox : TextBox 
    { 
     public IList<Number> Numbers 
     { 
      get 
      { 
       List<Number> numbers = new List<Number>(); 
       foreach (string line in Lines) 
       { 
        numbers.Add(new Number() 
        { 
         NumberText=line 
        }); 
       } 
       return numbers; 
      } 

      set 
      { 
       List<string> numberStrings = new List<string>(); 
       foreach (Number n in value) 
       { 
        numberStrings.Add(n.NumberText); 
       } 
       this.Lines = numberStrings.ToArray(); 
      } 
     } 
    }