Привязка к DependencyProperties в пользовательском исключении выдает пользовательский контроль - PullRequest
1 голос
/ 28 декабря 2011

Я создаю пользовательский контроль пользователя.У него есть два свойства DependencyProperties, которые я хотел бы привязать к свойствам.Когда я использую свой UserControl и выполняю привязку, он генерирует исключение:

System.Windows.Markup.XamlParseException:

«Невозможно установить« привязку »в PropertyValueсвойство типа 'AgentPropertyControl'. 'Binding' может быть установлен только для DependencyProperty объекта DependencyObject.

Я не могу понять, что я делаю неправильно.

Это мой код UserControl XAML:

<UserControl x:Class="AgentProperty.AgentPropertyControl"
             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="26" d:DesignWidth="288"
             x:Name="MyUserControl">
    <Grid Name="grid">
        <StackPanel Orientation="Horizontal">
            <Label Name="lblPropertyTitle" Width="100" Margin="2" FontWeight="Bold" VerticalAlignment="Center"/>
            <TextBox Name="tbPropertyValue" Width="150" Margin="2" VerticalAlignment="Center"/>
        </StackPanel>
    </Grid>
</UserControl>

Привязки установлены в коде:

public partial class AgentPropertyControl : UserControl
{
    public readonly static DependencyProperty PropertyTitleDP = DependencyProperty.Register("PropertyTitle", typeof(string), typeof(Label), new FrameworkPropertyMetadata("no data"));
    public readonly static DependencyProperty PropertyValueDP = DependencyProperty.Register("PropertyValue", typeof(string), typeof(TextBox), new FrameworkPropertyMetadata("no data"));

    public string PropertyTitle
    {
        set { SetValue(PropertyTitleDP, value); }
        get { return (string) GetValue(PropertyTitleDP); }
    }

    public string PropertyValue
    {
        set { SetValue(PropertyValueDP, value); }
        get { return (string)GetValue(PropertyValueDP); }
    }

    public AgentPropertyControl()
    {
        InitializeComponent();

        lblPropertyTitle.SetBinding(Label.ContentProperty, new Binding() {Source = this, Path = new PropertyPath("PropertyTitle")});
        tbPropertyValue.SetBinding(TextBox.TextProperty, new Binding() { Source = this, Path = new PropertyPath("PropertyValue"), Mode = BindingMode.TwoWay });
    }
}

И использование моего UserControl:

<AgentProperty:AgentPropertyControl PropertyTitle="ID" PropertyValue="{Binding Path=ID}" Grid.ColumnSpan="2"/>

ЕгоDataContext установлен в Grid, который содержит UserControl.

Почему возникает исключение и как я могу его решить?

1 Ответ

2 голосов
/ 28 декабря 2011

3-й аргумент DependencyProperty.Register - тип владельца.В вашем случае это должен быть ваш контроль:

public readonly static DependencyProperty PropertyTitleDP = DependencyProperty.Register("PropertyTitle", typeof(string), typeof(AgentPropertyControl), new FrameworkPropertyMetadata("no data"));
public readonly static DependencyProperty PropertyValueDP = DependencyProperty.Register("PropertyValue", typeof(string), typeof(AgentPropertyControl), new FrameworkPropertyMetadata("no data"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...