2012-01-24 2 views
2

У меня есть usercontrol и viewmodel, которая предоставляет свойство Reports. Информационный ресурс usercontrol привязан к viewmodel.Данные проекта в wpf

В контроле у ​​меня есть ListBox в окне списка связан Отчеты собственности

<ListBox x:Name="ReportListBox" ItemsSource="{Binding Reports}" 

       ItemTemplate="{StaticResource reportItemTemplate}" 
       IsSynchronizedWithCurrentItem="True" 
       Visibility="Visible" SelectionMode="Single"> 
</ListBox> 

Что я хочу иметь некоторые проектные данные, так что я создал XAML-файл, как это.

<m:Reports xmlns:m="clr-namespace:MYAPP.Modules.ReportList.Models"> 
    <m:Report ReportName="Reportname 1" Id="AAAA-BBB-CCC" ></m:Report> 
    <m:Report ReportName="Reportname 2" Id="AAAA-BBB-CCC" ></m:Report> 
</m:Reports> 

Если мне это нравится, ничего не отображается в конструкции VS. Если я меняю привязку списка на

<ListBox x:Name="ReportListBox" ItemsSource="{Binding}" 

Я могу видеть значения в дизайне. Я понимаю, почему это так, поскольку usercontrol привязан к viewmodel во время выполнения. То, что я думаю, что мне нужно для designdata, примерно такое:

<mc:ReportListViewModel xmlns:mc="clr-namespace:MYAPP.Modules.ReportList.ViewModels"> 
    <m:Reports xmlns:m="clr-namespace:MYAPP.Modules.ReportList.Models"> 
     <m:Report ReportName="Reportname 1" Id="AAAA-BBB-CCC" ></m:Report> 
     <m:Report ReportName="Reportname 2" Id="AAAA-BBB-CCC" ></m:Report> 
    </m:Reports> 
</mc:ReportListViewModel> 
</m:Reports> 

Но я получаю ошибку. «Тип ReportListViewModel не поддерживает прямой контент». У любого есть решение

ответ

3

Одним из способов получения данных о времени разработки было бы создать 2 вида моделей в вашем коде. Один из них будет вашей обычной моделью просмотра времени исполнения. Во-вторых, вы можете заглушить фиктивные данные. Затем в XAML можно выборочно установить контекст данных в то время как в конструкторе путем установки DataContext с префиксом пространства имен совмещенного

<Page 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    d:DataContext="{StaticResource DummyViewModel}"> 

Затем создайте экземпляр вашего объекта в ваших ресурсах

<Page.Resources> 
    <local:DummyViewModelClass x:Key="DummyViewModel"> 
</Page.Resources> 

Это легко решение для быстрого прототипирования, но может не обязательно хорошо масштабироваться.

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

http://blogs.msdn.com/b/delay/archive/2009/02/26/designerproperties-getisindesignmode-forrealz-how-to-reliably-detect-silverlight-design-mode-in-blend-and-visual-studio.aspx

+0

Спасибо за ответ я попробовал ваше первое решение, но только так я могу заставить его работать, если я положил D: DataContext в ListBox. Если я поставил страницу или в моем случае UserContrl, то он говорит: «Невозможно разрешить ресурс» – klashagelqvist

+0

К сожалению, DynamicResouce работает, когда я вставляю UserControl – klashagelqvist

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