Привязка каркаса сущности Custom Control - PullRequest
2 голосов
/ 28 ноября 2010

Я думаю о создании элемента управления - обычное многострочное текстовое поле, в которое пользователь будет вставлять номера телефонов с запятыми, разделяющими каждый номер.

1111111111,
2222222222,
3333333333,
4444444444,
...

У меня есть сущность User и Entity PhoneNumber.

СейчасЯ хотел бы связать объект phoneNumber с этим элементом управления.Вопрос в том, что я должен реализовать в этом элементе управления, чтобы он понимал, что связывать.Например, если я связываю phoneNumber с combobox .net знает, как показать его на этом элементе управления, но как это будет в моем случае?

спасибо за любую помощь и подсказку о том, как начать создавать что-то подобное.

пока

Ответы [ 3 ]

1 голос
/ 28 ноября 2010

Вы можете сделать это, как это делается в Combobox, иметь свойство для источника данных и членов данных, а затем в цикле кода через номер телефона вашей базы данных. столбец и добавьте их в текстовое поле с запятой после каждой записи. Я сам реализовал нечто похожее на это.

0 голосов
/ 03 декабря 2010

Вы можете создать свою собственную пользовательскую реализацию TextBox, которая имеет свойство, которое принимает вашу коллекцию объектов и переносит свойство 'Lines' в Textbox.Примерно так (при условии, что 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();
            }
        }
    }
0 голосов
/ 01 декабря 2010

возможно преобразование ваших данных в презентацию для просмотра пользователем и преобразование обратно в ваш домен решит вашу проблему. Вот пример моего кода для преобразования представления 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>
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...