Я создал пользовательский элемент управления, состоящий из автозаполнения с выбранным элементом ... до сих пор я реализовал его так, как мне не нравится ... Я имею в виду, ve вид XAML, Viewmodel и в режиме просмотра я загружаю данные из хранимой процедуры. Поскольку окно автозаполнения является сторонним UserControl, я добавил его в представление XAML и не определялся как пользовательский пользовательский контроль. Какая практика? Я думаю, что сейчас тот факт, что я использую Catel в MVVM Framework является irrilevant ..Пользовательский пользовательский контроль с MVVM и Catel
Благодаря
UPDATE # 1
Мои элементы управления UserControl должны иметь некоторые свойства, которые передаются с помощью XAML, например, (LoadDefaultValue)
<views:PortfolioChooserView x:Name="PortfolioChooserView" DataContext="{Binding Model.PortfolioModel}" Height="25" LoadDefaultValue="True" Width="150" />
для достижения такого сценария, который я должен был определить свойство зависимостей в моем PortfolioChooserView определяются как
public bool LoadDefaultValue
{
get { return (bool)GetValue(LoadDefaultValueProperty); }
set { SetValue(LoadDefaultValueProperty, value); }
}
public static readonly DependencyProperty LoadDefaultValueProperty = DependencyProperty.Register(
"LoadDefaultValue", typeof(bool), typeof(PortfolioChooserView), new PropertyMetadata(default(bool)));
Поскольку, если бы я определил его в Viewmodel, я бы не смог его установить.
Самое странное в том, что для того, чтобы передать его в ViewModel я должен был сделать такой трюк
public PortfolioChooserView()
{
InitializeComponent();
if (!isFirstLoad) return;
Focusable = true;
PortfolioCompleteBox.AllowDrop = true;
PortfolioCompleteBox.Focus();
DragDropManager.AddPreviewDragOverHandler(PortfolioCompleteBox, OnElementDragOver);
DragDropManager.AddDropHandler(PortfolioCompleteBox, OnElementDrop);
DataContextChanged += PortfolioChooserView_DataContextChanged;
isFirstLoad = false;
}
void PortfolioChooserView_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
var dataContext = DataContext as PortfolioModel;
if (dataContext != null)
{
dataContext.LoadDefaultValue = LoadDefaultValue;
dataContext.AllowNull = AllowNull;
//var converter = new PortfolioConverter();
//var portfolio = (Portfolio) converter.Convert(SelectedItem, null, null, CultureInfo.CurrentCulture);
//dataContext.SelectedItem = portfolio;
}
}
Но мне действительно не нравится использовать событие DataContextChanged ... Видите ли вы лучший подход? Спасибо
UPDATE # 2
Я держу это toghether, поскольку это родственный вопрос ... На некоторых ViewModel я использовал DeferValidationUntilFirstSaveCall = истина; в конструкторе отключить проверку при загрузке, но мои пользовательские элементы управления показывают красную рамку вокруг ... что мне делать, чтобы распространять эту информацию во вложенные usercontrols?
Еще раз спасибо
Я посмотрел на них, и они очень похожи на мои .. У меня только один вопрос, и именно поэтому я открыл эту тему ... см. Мое обновление, пожалуйста, – advapi
Вы проверили материал ViewToViewModel (это также в демках)? –
Я нахожусь в этом я отсутствовал атрибут [ViewToViewModel (MappingType = ViewToViewModelMappingType.TwoWayViewWins)]! – advapi