Как связать свойство пользовательского элемента управления со свойствами того же элемента управления в WPF? - PullRequest
2 голосов
/ 19 декабря 2009

Внутри моего пользовательского контроля у меня есть набор звонков Решения

 public List<string> Solutions { get; set; }

Я хочу связать это свойство с полем со списком в xaml того же пользовательского элемента управления?

Я пытался

<ComboBox HorizontalAlignment="Left" Margin="21,0,0,41" Name="cbAddSolution" Width="194" Height="21" VerticalAlignment="Bottom" 
              ItemsSource="{Binding Path=Solutions}"    />

но, похоже, это не сработало.

Ответы [ 2 ]

9 голосов
/ 19 декабря 2009

Назовите свой UserControl в XAML и назовите его из привязки следующим образом:

<UserControl x:Name = "MyUserControl">
  <ComboBox HorizontalAlignment="Left" Margin="21,0,0,41" Name="cbAddSolution" Width="194"
            Height="21" VerticalAlignment="Bottom" 
            ItemsSource="{Binding ElementName=MyUserControl, Path=Solutions}" />
</UserControl>

Если вы хотите правильно связать, ваш UserControl должен реализовать INotifyPropertyChanged для этого свойства или сделать это свойство свойством зависимости

Обновление

Или используйте RelativeSource, если вы не хотите называть UserControl

<UserControl>
  <ComboBox HorizontalAlignment="Left" Margin="21,0,0,41" Name="cbAddSolution" Width="194"
            Height="21" VerticalAlignment="Bottom" 
            ItemsSource="{Binding Path=Solutions, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
</UserControl>
2 голосов
/ 19 декабря 2009

Переместите XAML вашего элемента управления в свойство Template, т.е. вместо

<UserControl x:Class="MyUserControl" ...>
    ...
    <ComboBox ... />
    ...
</UserControl>

использование

<UserControl x:Class="MyUserControl" ...>
    <UserControl.Template>
        <ControlTemplate>
            ...
            <ComboBox ... />
            ...
        </ControlTemplate>
    </UserControl.Template>
</UserControl>

Затем вы можете использовать TemplateBinding:

            <ComboBox ... ItemsSource="{TemplateBinding Solutions}" />

Кстати, ваш вопрос очень похож на этот: Свойство UserControl, используемое дочерним элементом

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