Я рефакторинг фрагмента кода, который я написал несколько раз назад. Я написал пользовательский элемент управления, который позволяет пользователю выбирать партнера.Лучшей практикой является использование модели или простого свойства?
модели представления имеет 2 свойства определяется как
#region Properties
[ViewToViewModel(MappingType = ViewToViewModelMappingType.TwoWayViewWins)]
public bool AllowNull
{
get { return (bool)GetValue(AllowNullProperty); }
set { SetValue(AllowNullProperty, value); }
}
public static readonly DependencyProperty AllowNullProperty = DependencyProperty.Register("AllowNull", typeof(bool),
typeof(CounterpartChooserControl), new PropertyMetadata(default(bool)));
/// <summary>
/// This Dependency property is used upon KeyDown to propagate the click to the target usercontrol
/// </summary>
public ICommandSource DestinationControl
{
get { return (ICommandSource)GetValue(DestinationControlProperty); }
set { SetValue(DestinationControlProperty, value); }
}
public static readonly DependencyProperty DestinationControlProperty = DependencyProperty.Register("DestinationControl", typeof(ICommandSource), typeof(CounterpartChooserControl),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.None));
#endregion
и с точки зрения мне нужно использовать это я что-то сделать, как
<views4:CounterpartChooserControl Grid.Row="9" Grid.Column="1" Margin="5,2,5,2" DataContext="{Binding CounterPartModel}" >
</views4:CounterpartChooserControl>
Это означает, что я имею в ViewModel, определенного свойством как
[ViewModelToModel("Model")]
public CounterPartModel CounterPartModel
{
get { return GetValue<CounterPartModel>(CounterPartModelProperty); }
set { SetValue(CounterPartModelProperty, value); }
}
public static readonly PropertyData CounterPartModelProperty = RegisterProperty("CounterPartModel", typeof(CounterPartModel), null);
Проблема, с которой я столкнулся сейчас, заключается в том, что когда SelectedItem (который определенный в CounterpartChooserViewModel), эта информация напрямую не распространяется на основную модель представления (и это разумно, так как она находится внутри модели представления, и поэтому вложенное свойство не уведомляется в главной модели просмотра).
Это нормально, или я должен иметь SelectedCounterpart в главном viwemodel, привязать его с помощью XAML, как
и имеет DataContext решить как-то сам видом?
Укажите также имена типов vm. Недостаточно контекста. –