Свойства привязки через DataTemplates и ContentControl - PullRequest
0 голосов
/ 24 января 2012

Мне понравился этот ответ , и он почти подходит мне.

Но как мне этого добиться, если мой DataTemplate находится во внешнем * 1008?*?

Я использую Prism и предоставляю DataTemplates (для общих представлений CRUD) каждым модулем, используя файлы, подобные этому:

<ResourceDictionary ... some hidden ns here ... >
    <DataTemplate DataType="{x:Type model:Operation}">
        <vw:OperationView />
    </DataTemplate>
    <DataTemplate DataType="{x:Type model:Customer}">
        <vw:CustomerView />
    </DataTemplate>
</ResourceDictionary>

Затем я использую этот ответ , чтобы объединить ResourceDictionaries в приложении Shell, и у меня есть представление CRUD по умолчанию, которое имеет этот код:

<ContentControl Content="{Binding MyGenericObject}" />

То, что ContentControl автоматически вытягивает правильное представление.Он работает нормально, но я хочу знать, свойство привязки объектов в каждом представлении.

Вот пример этих представлений (OperationView.xaml):

<UserControl x:Class="TryERP2.Cadastro.View.OperationView"
             ... some hidden NS ... >
    <StackPanel>
        <Label Content="Id" />
        <TextBox Text="{Binding ????WHAT????}" />
        <Label Content="Description" />
        <TextBox Text="{Binding ????WHAT????}" />
    </StackPanel>
</UserControl>

Как связатьэти свойства?

Ответы [ 2 ]

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

Поскольку DataContext за OperationView будет объектом типа Operation, тогда вы просто привязываетесь к любому свойству на Operation, которое вы хотите

<!-- DataContext will be model:Operation per your DataTemplate -->
<UserControl x:Class="TryERP2.Cadastro.View.OperationView"
             ... some hidden NS ... >
    <StackPanel>
        <Label Content="Id" />
        <TextBox Text="{Binding Id}" />
        <Label Content="Description" />
        <TextBox Text="{Binding Description}" />
    </StackPanel>
</UserControl>
1 голос
/ 24 января 2012

DataContext в UserControl - это объект вашей модели, поэтому вы можете напрямую связать его свойства следующим образом:

Text="{Binding SomeProperty}"

(Если указан только путь, привязка относительно DataContext, обратите внимание, что в ответе, который вы связали, было намерение иметь привязку TwoWay к самому DataContext, который был примитивом строка, это нельзя сделать с помощью простой привязки, такой как {Binding .}, необходимо указать путь свойства, нацеленный на фактическое свойство)

...