Ошибка привязки пользовательского свойства usercontrol silverlight - PullRequest
0 голосов
/ 25 января 2012

У меня есть пользовательский контроль с DataContext="{Binding RelativeSource={RelativeSource self}}"

В коде позади я сделал свойство зависимости вроде:

    public static DependencyProperty ElementNameProperty = DependencyProperty.Register("ElementName",
        typeof(string),
        typeof(ElementControl),
        new PropertyMetadata(new PropertyChangedCallback((s, e) => { new Base().OnPropertyChanged("ElementName"); })));

    public string ElementName
    {
        get
        {
            return (string)base.GetValue(ElementNameProperty);
        }
        set
        {
            base.SetValue(ElementNameProperty, value);

        }
    }

Теперь, когда я пытаюсь использовать этот usercontrol в моем mainpage.xaml и использовать следующую привязку: <test.TestControl ElementName="{Binding name}" />, он продолжает искать свойство 'name' в моем пользовательском usercontrol вместо того, откуда оно должно взяться?

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 25 января 2012

Он ищет там, потому что у вас установлен DataContext на самом верхнем уровне для вашего пользовательского элемента управления.Что вам нужно сделать, это избавиться от относительной привязки к себе в пользовательском элементе управления и указать ElementName в привязках (внутри пользовательского элемента управления).Кстати, вам, вероятно, не нужно OnPropertyChanged в PropertyChangedCallback причине DependencyProperties по своей природе уведомлять об изменениях значения.

0 голосов
/ 26 января 2012

Я в конце концов решил это так.Не так, как я хотел, но это (на мой взгляд) довольно аккуратное решение.

CustomUserControl.xaml

<UserControl x:Class="TestApp.Controls.CustomUserControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         mc:Ignorable="d"
         Width="75"
         Height="75">
  <Canvas x:Name="LayoutRoot"
      Background="Black">
    <StackPanel Orientation="Vertical">
      <Image x:Name="UCImage"
         Width="50"
         Height="50"
         HorizontalAlignment="Center" />
      <TextBlock x:Name="UCText"
             HorizontalAlignment="Center" />
    </StackPanel>
  </Canvas>
</UserControl>

CustomUserControl.xaml.cs

public partial class ElementControl : UserControl
{
    #region DependencyProperty ElementNameProperty
    public static DependencyProperty ElementNameProperty = DependencyProperty.Register("ElementName",
        typeof(string),
        typeof(ElementControl),
        new PropertyMetadata(new PropertyChangedCallback((s, e) => 
    { 
    //See Here
    ((ElementControl)s).UCText.Text = e.NewValue as string; 
    })));

    public string ElementName
    {
        get
        {
            return (string)base.GetValue(ElementNameProperty);
        }
        set
        {
            base.SetValue(ElementNameProperty, value);
        }
    }
    #endregion
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...