Проектные данные в wpf - PullRequest
2 голосов
/ 24 января 2012

У меня есть usercontrol и viewmodel, который выставляет свойство Reports. Текст данных usercontrol привязан к модели представления.

В элементе управления у меня есть список, список привязан к свойству Отчеты

<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}"

Я вижу значения в дизайне. Я понимаю, почему это так, поскольку пользовательский контроль связан с моделью представления во время выполнения. Я думаю, что мне нужно для 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>

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

1 Ответ

3 голосов
/ 24 января 2012

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

<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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...