2013-08-06 1 views
0

Я только что начал использовать Catel для приложения WPF, и у меня есть несколько проблем.Catel WPF Отложенная проверка

1) Когда кнопка не может быть выполнена, я не вижу кнопку, выделенную серым цветом в соответствии с документацией.

2) Где я могу поместить код для сохранения значений в базу данных - в ViewModel или Model. Есть ли какой-нибудь пример?

3) Есть ли пример использования меню на главной странице и загрузки элементов управления пользователя при нажатии пунктов меню?

4) Когда я устанавливаю DeferValidationUntilFirstSaveCall = true в конструкторе моего ViewModel, я получаю исключение, когда появляется диалоговое окно. Исключением является следующее:

System.NullReferenceException was unhandled by user code 
    HResult=-2147467261 
    Message=Object reference not set to an instance of an object. 
    Source=Catel.MVVM 
    StackTrace: 
     at Catel.Windows.Data.Converters.GetFirstValidationErrorConverter.Convert(Object value, Type targetType, Object parameter) 
     at Catel.Windows.Data.Converters.ValueConverterBase.Convert(Object value, Type targetType, Object parameter, CultureInfo culture) 
     at System.Windows.Data.BindingExpression.TransferValue(Object newValue, Boolean isASubPropertyChange) 
     at System.Windows.Data.BindingExpression.Activate(Object item) 
     at System.Windows.Data.BindingExpression.AttachToContext(AttachAttempt attempt) 
     at System.Windows.Data.BindingExpression.AttachOverride(DependencyObject target, DependencyProperty dp) 
     at System.Windows.Data.BindingExpressionBase.OnAttach(DependencyObject d, DependencyProperty dp) 
     at System.Windows.StyleHelper.GetInstanceValue(UncommonField`1 dataField, DependencyObject container, FrameworkElement feChild, FrameworkContentElement fceChild, Int32 childIndex, DependencyProperty dp, Int32 i, EffectiveValueEntry& entry) 
     at System.Windows.StyleHelper.GetChildValueHelper(UncommonField`1 dataField, ItemStructList`1& valueLookupList, DependencyProperty dp, DependencyObject container, FrameworkObject child, Int32 childIndex, Boolean styleLookup, EffectiveValueEntry& entry, ValueLookupType& sourceType, FrameworkElementFactory templateRoot) 
     at System.Windows.StyleHelper.GetChildValue(UncommonField`1 dataField, DependencyObject container, Int32 childIndex, FrameworkObject child, DependencyProperty dp, FrugalStructList`1& childRecordFromChildIndex, EffectiveValueEntry& entry, ValueLookupType& sourceType, FrameworkElementFactory templateRoot) 
     at System.Windows.StyleHelper.GetValueFromStyleOrTemplate(FrameworkObject fo, DependencyProperty dp, EffectiveValueEntry& entry) 
     at System.Windows.StyleHelper.ApplyStyleOrTemplateValue(FrameworkObject fo, DependencyProperty dp) 
     at System.Windows.StyleHelper.InvalidateContainerDependents(DependencyObject container, FrugalStructList`1& exclusionContainerDependents, FrugalStructList`1& oldContainerDependents, FrugalStructList`1& newContainerDependents) 
     at System.Windows.StyleHelper.DoStyleInvalidations(FrameworkElement fe, FrameworkContentElement fce, Style oldStyle, Style newStyle) 
     at System.Windows.StyleHelper.UpdateStyleCache(FrameworkElement fe, FrameworkContentElement fce, Style oldStyle, Style newStyle, Style& styleCache) 
     at System.Windows.FrameworkElement.OnStyleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
     at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e) 
     at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e) 
     at System.Windows.Controls.TextBox.OnPropertyChanged(DependencyPropertyChangedEventArgs e) 
     at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args) 
     at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType) 
     at System.Windows.DependencyObject.InvalidateProperty(DependencyProperty dp, Boolean preserveCurrentValue) 
     at System.Windows.FrameworkElement.UpdateStyleProperty() 
     at System.Windows.FrameworkElement.OnInitialized(EventArgs e) 
     at System.Windows.FrameworkElement.TryFireInitialized() 
     at System.Windows.FrameworkElement.EndInit() 
     at MS.Internal.Xaml.Runtime.ClrObjectRuntime.InitializationGuard(XamlType xamlType, Object obj, Boolean begin) 
     at MS.Internal.Xaml.Runtime.PartialTrustTolerantRuntime.InitializationGuard(XamlType xamlType, Object obj, Boolean begin) 
     at System.Xaml.XamlObjectWriter.Logic_EndInit(ObjectWriterContext ctx) 
     at System.Xaml.XamlObjectWriter.WriteEndObject() 
     at System.Xaml.XamlWriter.WriteNode(XamlReader reader) 
     at System.Windows.Markup.WpfXamlLoader.TransformNodes(XamlReader xamlReader, XamlObjectWriter xamlWriter, Boolean onlyLoadOneNode, Boolean skipJournaledProperties, Boolean shouldPassLineNumberInfo, IXamlLineInfo xamlLineInfo, IXamlLineInfoConsumer xamlLineInfoConsumer, XamlContextStack`1 stack, IStyleConnector styleConnector) 
     at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri) 
     at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri) 
     at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream) 
     at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator) 
     at FNZCIressClient.Views.AccountMappingWindow.InitializeComponent() in h:\Documents\iress-utils\FNZCIressClient\FNZCIressClient\Views\AccountMappingWindow.xaml:line 1 
     at FNZCIressClient.Views.AccountMappingWindow..ctor(AccountMappingViewModel viewModel) in h:\Documents\iress-utils\FNZCIressClient\FNZCIressClient\Views\AccountMappingWindow.xaml.cs:line 28 
    InnerException: 

Если я удаляю строку defervalidation из кода, всплывающее окно работает.

Любая помощь и совет оценены.

ответ

0

1) Взгляните на examples repository, в нем есть много примеров.

2) Переопределить метод Save()

3) Используйте UIVisualizerService или Prism динамически загружать регионы

4) Я буду смотреть на это. Вы просто используете DataWindow или пользовательский?

+0

1) Когда я запускаю приложение Catel.WPF.PersonApplication из примеров, ни одна из кнопок не выделена серым цветом. Я что-то упускаю? 2) В ViewModel? Я не вижу никаких методов в модели, которые когда-либо называются 3) Я использовал шаблон управления в соответствии с демонстрацией MyMediaStuff 4) Просто обычный DataWindow –

+0

Я также пытаюсь использовать Catel с BrightstarDB. BrightStarDB генерирует частичный класс для каждого объекта, который имеет свои собственные свойства для каждого поля в интерфейсе/классе. Эти столкновения со свойствами, которые используются для Catel с помощью фрагментов modelprop. У вас есть идеи, как я могу комбинировать BrighstarDB с Catel? –

+0

Пожалуйста, попробуйте более новые демонстрации. «MyMediaStuff» действительно старый, все последние примеры обновляются в репозитории примеров. PersonApplication делает серое вне, когда ничего не выбрано (кнопка «Редактировать» должна быть отключена, когда никто не выбран). Пока BrighstarDB реализует INotifyPropertyChanged (и предпочтительный IEditableObject), он будет работать нормально. –