Silverlight 4 - заголовок поля данных службы RIA в DataForm (AutoGeneratingField) - PullRequest
0 голосов
/ 14 декабря 2011

У меня есть 2 модели на моем серверном приложении (TradeMarks & RetailStores) В каждом RetailStore есть поле TradeMarkId для перекрестных ссылок. В моей модели метаданных DomainService я определил RetailStore (поле TradeMarkId) следующим образом:

Class RetailStore:
[Display(Order = 5, Name = "RetailStoreTradeMarkTitle", Description = "RetailStoreTradeMarkDescription", ResourceType = typeof(RegistrationDataResources))]
public int TradeMarkId { get; set; }

На стороне клиента я улавливаю поле AutoGeneratingField и заменяю его списком со списком всех торговых знаков следующим образом:

        if (e.PropertyName == "TradeMarkId")
        {

            ComboBox TradeMarkIdComboBox = new ComboBox { DisplayMemberPath = "TradeMarkName" };
            Binding itemsSource = new Binding("TradeMarks") { Source = this.retailStoreDomainDataSource.DomainContext };
            Binding selectedItem = new Binding("TradeMark") { Mode = BindingMode.TwoWay };
            TradeMarkIdComboBox.SetBinding(ComboBox.ItemsSourceProperty, itemsSource);
            TradeMarkIdComboBox.SetBinding(ComboBox.SelectedItemProperty, selectedItem);

            DataField TradeMarkIdField = new DataField
            {
                Content = TradeMarkIdComboBox,
                Label = e.Field.Label

            };
            e.Field = TradeMarkIdField;

        }

все отлично работает с точки зрения связывания, но я потерял «RetailStoreTradeMarkTitle», Description = «RetailStoreTradeMarkDescription» DisplayAttributes, которые я определил в модели! и я потерял Валидацию для этого поля.

Итак, мой вопрос, что я делаю не так? Есть ли способ вернуть валидацию модели и заголовки полей?

Спасибо заранее, Wame

1 Ответ

0 голосов
/ 06 января 2012

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

Я только что реализовал нечто очень похожее, и этот код работал для меня: -

       if (e.PropertyName == "TradeMarkId")
       {
           ComboBox target = new ComboBox() { DisplayMemberPath = "TradeMarkName", SelectedValuePath = "TradeMarkId" };
           target.ItemsSource = TaskManager.Manager.GanttItemSource;
           e.Field.ReplaceTextBox(target, ComboBox.SelectedValueProperty, binding => binding.Converter = new TargetNullValueConverter());             
       }

Надеюсь, это работает для вас! (Имейте в виду, что вам придется выбрать свойство идентификатора - я не уверен, какое поле вы используете в качестве идентификатора торговой марки - я догадался, что это «TradeMarkId».

...