2015-06-23 2 views
0

Я строю окно с набором строк, которые разделяют ту же раскладку, но их содержание должно быть различным, например:WPF- Связующие свойства в DataTemplate

| (Label Content:)"Name1" | (Textbox Text)"SomeText" | 
| (Label Content:)"Name5" | (Textbox Text)"OtherText" | 

я определил DataTemplate, который в основном содержит Grid, определяющую размер каждого столбца, содержит все необходимые ему элементы (несколько меток, текстовые поля и т. д.) и устанавливает их общие свойства.

<UserControl.Resources> 
    <DataTemplate x:Key="AxisRangeEntry" x:Shared="False"> 
      <Grid HorizontalAlignment="Stretch" VerticalAlignment="Top"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="50" /> 
        <ColumnDefinition Width="50" /> 
        .... 
       </Grid.ColumnDefinitions> 
       <Label x:Name="MyLabel" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Center"> 
       ... 
       <TextBox x:Name="MyTextbox" Grid.Column="2" Width="110" HorizontalContentAlignment="Right" /> 
       ... 
      </Grid> 
    </DataTemplate> 
</UserControl.Resources> 

Тогда в моем окне я начинаю добавлять шаблон данных, как ContentControls в панели стека:

<ContentControl ContentTemplate="{StaticResource AxisRangeEntry}" /> 
<ContentControl ContentTemplate="{StaticResource AxisRangeEntry}" /> 
.... 

Я изо всех сил, чтобы выяснить, как я могу определить некоторые свойства элементов управления внутри DataTemplate к быть привязанным и привязывать к статическому значению/внешнему свойству, когда я начинаю определять ContentControl. Эффективно каждый ContentControl должен будет иметь возможность определять такие вещи, как MyLabel и MyTextbox текст.

Я уже создал CustomControls, на котором было DependencyProperties, с которым я мог бы привязываться при добавлении их в другое окно. С DataTemplate, однако я не уверен, как я буду определять эти поля как bindable и привязываться к ним при включении новой версии шаблона.

Любая помощь будет оценена по достоинству.

ответ

0

Из чего это похоже, вы не используете шаблон MVVM.

Для вашей ситуации я бы рекомендовал использовать MVVM - посмотрите на эту статью для быстрой интро к чему-то, что будет соответствовать вашему делу (ItemsControl с ItemTemplate)

Что вы могли бы сделать, это создать ObservableObject, чтобы представить каждую строку, а затем привязать коллекцию ObservableObjects к ItemsSource ItemsControl с помощью ItemTemplate, установленного на созданный вами DataTemplate. В DataTemplate вы указываете каждую привязку к свойству в строке ObservableObject, а WPF привязывается к правильному экземпляру для каждой строки.

http://www.wpf-tutorial.com/list-controls/itemscontrol/

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

0

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

... [к] определить некоторые свойства управления внутри DataTemplate быть Привязываемыми к,

  1. В шаблоне связывания по умолчанию будет родителями контекста данных. Просто говоря, {Binding} по умолчанию будет использовать этот элемент в контексте данных. Если связанный элемент имеет определенное свойство, используйте {Binding MyPropertyName}. Просто убедитесь, что родитель или его предки имеют действительный контекст данных.
  2. Подумайте о шаблонах данных в своем конечном месте, как если бы вы их жестко закодировали. Он будет вести себя так же ....

и привязать их к статическому значению/внешнему свойству, когда я началу определения ContentControls.

  1. Так как это звучит, как это в пользовательском элементе управления, то DataContext будет DataContext конечного потребителя и, скорее всего, DataContext будет бесполезным.
  2. Если это пользовательский элемент управления, используйте именованное связывание и привяжите его к свойству элемента управления. Например, имя элемента управления, в XAML, дано название «MyControl» (x:Name="MyControl") и в шаблоне связывания, один путь может непосредственно к нему, такие как

    {Binding MyCustomControlDependencyProperty, ElementName=MyControl}

создано CustomControls, обладающие свойствами зависимостей

С приведенными выше правилами все еще можно и должно ИМХО использовать свойства зависимостей настраиваемого элемента управления для передачи информации от потребителя до элемента данных, который будет использовать его динамически.

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