Как связать свойство пользовательского элемента управления со свойствами того же элемента управления в WPF?
Внутри моего пользовательского контроля у меня есть коллекция вызовов Решения
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 ответа
Назовите свой 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>
Переместите 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, используемое дочерним элементом