簡體   English   中英

自定義控件實體框架綁定

[英]Custom Control entity framework binding

我正在考慮創建控件-普通的多行文本框,用戶可以在其中插入電話號碼,並用逗號分隔每個電話號碼。

1111111111,
2222222222,
3333333333,
4444444444,
...

我有實體用戶和實體電話號碼。

現在,我想將phoneNumber實體綁定到該控件。 問題是我應該在此控件中實現什么,以便它可以理解要綁定的內容。 例如,如果我將phoneNumber綁定到combobox。NET知道如何在此控件上顯示它,但在我的情況下又如何呢?

感謝您提供的任何幫助和提示,以及如何開始創建類似的內容。

再見

您可以像在“組合框”中那樣進行操作,為數據源和數據成員設置一個屬性,然后在代碼中遍歷數據庫的電話號碼。 列,並在每次輸入后在文本框中添加逗號。 我本人已經實現了與此類似的功能。

也許演示文稿中的數據轉換為用戶視圖並在您的域中轉換回即可解決您的問題。 這是我的示例代碼,用於將枚舉演示文稿轉換為我項目中的本地化資源:雖然這不是一個優雅的代碼,但也許可以解決您的問題。 在轉換中,您可以用逗號將加入的數字集合分割成逗號並將其設置為控件,然后反過來用逗號分割字符串以構建集合。

[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>
{
}

您可以創建自己的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();
            }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM