0

Silverlight У меня есть собственный UserControl с DataContext="{Binding RelativeSource={RelativeSource self}}"обычай UserControl свойства связывания отказ

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

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» в моем пользовательском контролере вместо того, откуда он должен исходить?

Что я делаю неправильно?

ответ

0

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

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 
} 
1

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

+0

Это не решает проблему. Удаление datacontext делает привязку родительского элемента управления к дочернему элементу управления. Таким образом, мне придется изменить имена привязок на то, что находится в элементе управления. –

Смежные вопросы