WPF Как выставить поля на UserControl - PullRequest
0 голосов
/ 11 ноября 2010

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

Примеры, которые мне удалось найти, имеют свойства CLR для пользовательского элемента управления, доступ к которым осуществляется в коде, а не через XAML.

<Window x:Class="WpfApplication2b.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:WpfApplication2b="clr-namespace:WpfApplication2b" Title="MainWindow" Height="410" Width="520">
<Grid>
    <WpfApplication2b:MyUserControl></WpfApplication2b:MyUserControl>
</Grid>

А вот и сам пользовательский элемент управления.

<UserControl x:Class="WpfApplication2b.MyUserControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<Grid Background="#FFD8AA13">
    <ListBox Height="276" HorizontalAlignment="Left" Margin="12,12,0,0" Name="listBox1" VerticalAlignment="Top" Width="276" />
</Grid>

Как видите, это просто список на другом цветном фоне. Я понятия не имею, куда идти дальше:)

Я предполагаю, что мне нужно добавить свойство кода для поля со списком в качестве свойства зависимости?

Редактировать: я добавил свойство dependencyProperty, но не думаю, что у меня есть смысл.

    public partial class MyUserControl : UserControl
{
    public static readonly DependencyProperty ListBoxProperty;

    static MyUserControl()
    {
        FrameworkPropertyMetadata md = new FrameworkPropertyMetadata();
        MyUserControl.ListBoxProperty = DependencyProperty.Register("MyListBox", typeof (ListBox),
                                                                    typeof (MyUserControl), md);

    }

    public ListBox MyListBox
    {
        get
        {
            return (ListBox) GetValue(ListBoxProperty);
        }
        set
        {
            SetValue(ListBoxProperty, value);
        }
    }

    public MyUserControl()
    {
        InitializeComponent();
    }
}

Ответы [ 2 ]

1 голос
/ 12 ноября 2010

Ваш UserControl унаследует DataContext от окна, поэтому вы можете связать свойства на ListBox, как если бы он был объявлен в окне. Чтобы сделать элемент управления более гибким, вы можете объявить свойства зависимостей для элементов данных из DataContext, которые вы хотите использовать (т.е. ItemsSource коллекция), и передать их в элемент управления вместо передачи ListBox out .

0 голосов
/ 17 ноября 2010

Я думаю, что этот вопрос / ответ - почти то, что вы ищете. По сути, вам нужно создать свойство зависимостей (используя метод регистрации AddOwner) и настроить привязку данных на ListBox ItemsSource для подключения к свойству зависимости. Пример в ответе делает то же самое для ComboBox, и должен быть почти таким же для ListBox.

Предоставление внутренних управляющих свойств для связывания в WPF

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