Я пытаюсь согнуть DataForm для поддержки множества ко многим и связывания списков дочерних объектов. Я получил возможность контролировать отображение объектов и иметь доступ к событию при изменении.
Например:
OfferEditorForm.AutoGeneratingField += new EventHandler<DataFormAutoGeneratingFieldEventArgs>(OfferEditorFormGeneratingField);
А вот мое маленькое переопределение:
if (e.PropertyName == "Client")
{
var stack = new StackPanel();
var dataField = new DataField { Content = stack, Label = "Client:" };
var binding = new Binding("CustomerClients") { Source = _viewModel };
var combo = new ComboBox
{
DisplayMemberPath = "Name",
Name = "OfferEditForm_Client",
SelectedItem = _viewModel.CustomerLoyaltyProgramOffer.Client
};
combo.SetBinding(ComboBox.ItemsSourceProperty, binding);
combo.SelectionChanged += new SelectionChangedEventHandler(CustomerClients_SelectionChanged);
stack.Children.Add(combo);
dataField.Content.UpdateLayout();
e.Field = dataField;
}
Я перехватываю событие SelectedChanged и обновляю элемент в моей модели представления, который устанавливается как текущий элемент для формы следующим образом:
void CustomerClients_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
FrameworkElement frameworkElement = sender as FrameworkElement;
ComboBox comboBox = (ComboBox)frameworkElement.FindName("OfferEditForm_Client");
if (comboBox != null)
{
_viewModel.CustomerLoyaltyProgramOffer.Client = (CustomerClient)comboBox.SelectedItem;
_viewModel.CustomerLoyaltyProgramOffer.CouponImage = "OMG!";
}
}
Когда я отправляю изменения, в этом примере CouponImage отправляется для обновления метода в моей службе домена, но Клиент по-прежнему равен NULL.
CustomerLoyaltyProgramOffer, похоже, не вызывает изменение свойства уведомления.
Это проблема дочернего объекта? Я все об этом ошибаюсь? Нужно ли создавать целый шаблон редактирования?