2013-10-15 3 views
0

У меня есть ViewModel, у которого есть свойство типа InternalViewModel, которое, в свою очередь, имеет свойство Collection.DesignInstance: свойство вложенной коллекции не распознано

Учитывая, что в целях в DataContext является экземпляром ViewModel, связывающий внутреннюю коллекцию требует следующий синтаксис:

{Binding InternalViewModelProperty.Collection} 

Во время выполнения он работает так, как ожидалось. Однако, если я использую DesignInstance в качестве прокси-сервера для представления объекта ViewModel, во время разработки он вообще не увидит коллекцию (например, не генерируется генерация столбцов).

Если я обманываю и выставить свойство Collection как свойство ViewModel и изменяет связывание:

{Binding Collection} 

Затем он снова работает во время разработки.

Есть ли причина, по которой коллекция, вложенная в собственность другого объекта, принадлежащего ViewModel, ведет себя по-разному во время разработки? Это ограничение DesignInstance?

Вот код XAML:

<UserControl 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:local="clr-namespace:LocalNS" 
    xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid" 
    mc:Ignorable="d" 
    x:Class="MyUserControl" 
    d:DataContext="{d:DesignInstance Type=local:MyViewModel}" 
    > 
<Grid> 
    <DataGrid ItemsSource="{Binding InternalViewModelProperty.Collection}"/> 
</Grid> 
</UserControl> 
+0

Предоставляет ли InternalViewModelProperty интерфейс INotifyPropertyChanged? – Tony

+0

Да, да. Тем не менее, свойство Collection является readonly, поэтому PropertyChanged никогда не будет повышаться с помощью «Collection» в качестве измененного свойства. AFAIK это не должно быть проблемой, не так ли? – Crono

+0

Покажите нам xaml, как вы установили DesignInstance? –

ответ

1

Прежде всего, эта проблема может быть просто, что вам нужно добавить IsDesignTimeCreatable=True к вашему d:DesignInstance декларации, как это:

d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}" 

Если Безразлично» t help, проблема может заключаться в том, что ваша модель представления не имеет конструктора без параметров или не может установить значение для InternalViewModelProperty в своем конструкторе.

Другими словами, ваша модель представления должна иметь конструктор без параметров, и внутри этого конструктора вам необходимо установить InternalViewModelProperty на ненулевое значение. Кроме того, вы должны убедиться, что свойство CollectionInternalViewModelProperty также установлено на ненулевое значение.

+0

Вот и все! Спасибо огромное! : D – Crono

Смежные вопросы