Свойство зависимости не обновляет пользовательский интерфейс пользователя - PullRequest
0 голосов
/ 24 декабря 2011

У меня есть usercontrol, в котором есть пара текстовых блоков

<UserControl x:Class="Tester.Messenger"
         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" 
         x:Name="myUserControl"
         >  
<TextBlock Text="{Binding ElementName=myUserControl,Path=Header,Mode=TwoWay}" Foreground="LightGray" FontSize="11"  Margin="3,3,0,-3"/>
<TextBlock Grid.Row="1" Grid.ColumnSpan="2" Text="{Binding ElementName=myUserControl,Path=Message, Mode=TwoWay}" Foreground="White" FontSize="16" Margin="3,-5"/>

В моем коде есть два свойства зависимостей, к которым я привязываю вышеуказанное свойство Textblocks Text.

public static readonly DependencyProperty HeaderProperty =
        DependencyProperty.Register("HeaderProperty", typeof(string), typeof(UserControl), new PropertyMetadata("header"));

    public static readonly DependencyProperty MessageProperty =
        DependencyProperty.Register("MessageProperty", typeof(string), typeof(UserControl), new PropertyMetadata(null));


 public string Header
    {
        get
        {
            return (string)GetValue(HeaderProperty);
        }
        set
        {
            SetValue(HeaderProperty, value);
        }
    }

    public string Message
    {
        get
        {
            return (string)GetValue(MessageProperty);
        }
        set
        {
            SetValue(MessageProperty, value);
        }
    }

Когда я создаю объект моего UserControl, меняю свойства Header и Message и помещаю элемент управления в коллекцию элементов ItemControls, тогда они не отражаются в элементе управления. Элемент управления просто отображает значения по умолчанию для заголовка и сообщения.

 Messenger m = new Messenger();
        m.Header = "colin";
        m.Message = "Download File ?";
        iControl.Items.Add(m);

1 Ответ

4 голосов
/ 24 декабря 2011

Первый параметр в вашем вызове DependencyProperty.Register неверен:

public static readonly DependencyProperty HeaderProperty =
        DependencyProperty.Register("HeaderProperty", typeof(string), typeof(UserControl), new PropertyMetadata("header"));

должно быть:

public static readonly DependencyProperty HeaderProperty =
        DependencyProperty.Register("Header", typeof(string), typeof(UserControl), new PropertyMetadata("header"));

Строка должна быть именем свойства, которое будет отображаться в XAML, то есть без суффикса «Property». То же самое касается вашего сообщения DependencyProperty.

...