Подключение внутренних ViewModels к UserControls в Silverlight - PullRequest
0 голосов
/ 10 августа 2010

Я пытаюсь отобразить список заметок. У меня есть ItemsControl, который связан с коллекцией NoteViewModel. Поэтому в шаблоне данных элемента управления элементов я хочу создать NoteControl (пользовательский элемент управления для отображения заметки) и связать его свойство ViewModel с NoteViewModel в коллекции.

У меня сейчас есть это:

    <ItemsControl x:Name="itemsControl1" Grid.Row="1" ItemsSource="{Binding Notes}" >
        <ItemsControl.Template>
            <ControlTemplate TargetType="ItemsControl">
                <ScrollViewer>
                    <ItemsPresenter/>
                </ScrollViewer>
            </ControlTemplate>
        </ItemsControl.Template>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <uc:NoteControl uc:NoteControl.ViewModel="{Binding}"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

Но я получаю это исключение:

System.ArgumentException: Object of type 'System.Windows.Data.Binding' cannot be converted to type 'NotePrototype.NoteViewModel'.

Какой правильный синтаксис для этого? Есть ли лучший метод для подключения внутренних ViewModels к внутренним UserControls, которые динамически создаются / связываются?

1 Ответ

1 голос
/ 10 августа 2010

Лучше присоединить ViewModel к DataContext вашего UserControl, а в usercontrol вам не нужно свойство ViewModel, вы можете просто привязать неявный Datacontext, потому что это будет вы ViewModel

Дополнительные примечания: Чтобы включить привязку данных в конструкторе, следуйте приведенному ниже примеру:

<UserControl  
            <!--
              all the other declaration needed are here
            -->
        xmlns:local="clr-namespace:NotePrototype"
        d:DataContext="{DynamicResource ViewModel}" 
>
    <UserControl.Resources>
        <local:NoteViewModel x:Key="ViewModel" d:IsDataSource="True" />
    </UserControl.Resources>

<!--
  put your content here
-->
</UserControl>

Отредактировал ваш пример для ItemsControl:

<ItemsControl x:Name="itemsControl1" Grid.Row="1" ItemsSource="{Binding Notes}" >
    <ItemsControl.Template>
        <ControlTemplate TargetType="ItemsControl">
            <ScrollViewer>
                <ItemsPresenter/>
            </ScrollViewer>
        </ControlTemplate>
    </ItemsControl.Template>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <uc:NoteControl DataContext="{Binding}"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...