Использование типизированных шаблонов данных для одного элемента управления - PullRequest
3 голосов
/ 27 мая 2011

Есть ли способ назначить какое-либо свойство, скажем, Border, для ViewModel и сделать так, чтобы содержимое Border совпадало с тем, какой типизированный шаблон данных соответствует этому VieWModel?

Это очень надуманный пример, но допустим, у меня есть пользовательский контроль:

<Grid>
    <StackPanel>
        <TextBox Height="30" Width="300" Margin="10" Text="{Binding IntProperty}"></TextBox>
        <TextBox Height="30" Width="300" Margin="10"></TextBox>
        <Border x:Name="SingleElement" Height="100" Width="350" BorderBrush="Red" />
    </StackPanel>
</Grid>

И у меня есть этот типизированный шаблон данных:

<DataTemplate DataType="local:SingleItemViewModel1">
    <StackPanel>
        <TextBlock Margin="10" Text="{Binding A}"></TextBlock>
        <TextBlock Margin="10" Text="{Binding B}"></TextBlock>
    </StackPanel>
</DataTemplate>

В коде моего пользовательского элемента управления (опять же, надуманного) есть свойство SingleElement, которое я могу назначить новому экземпляру SingleItemViewModel1, так что вышеуказанный DataTemplate будет отображаться внутри него?

1 Ответ

0 голосов
/ 27 мая 2011

Предположим, что вы привязаны к модели представления, которая предоставляет свойство с именем "Item" типа SingleItem:

После определения шаблона данных это должно сработать:

<Grid>
    <StackPanel>
        <TextBox Height="30" Width="300" Margin="10" Text="{Binding IntProperty}"></TextBox>
        <TextBox Height="30" Width="300" Margin="10"></TextBox>
        <Border x:Name="SingleElement" Height="100" Width="350" BorderBrush="Red">
            <ContentControl Content="{Binding Item}"/>
        </Border>
    </StackPanel>
</Grid>

Обратите внимание, что Border является потомком FrameworkElement и Decorator - у него нет своего «контента», только один визуальный дочерний элемент. Следовательно, ContentControl объявлен как его дочерний элемент.

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