Вложенные свойства Silverlight - PullRequest
       10

Вложенные свойства Silverlight

1 голос
/ 30 августа 2010

Первый элемент управления Я могу создать UserControl с DependencyProperty с именем UserNameLabel.Затем я могу просто установить для datacotext значение SourceSource в UserControl и заполнить свойство в разметке.

...

       public String UserNameLabel
    {
        get { return (String)GetValue(UserNameLabelProperty); }
        set { SetValue(UserNameLabelProperty, value); }
    }

    // Using a DependencyProperty as the backing store for UserNameLabel.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty UserNameLabelProperty =
        DependencyProperty.Register("UserNameLabel", typeof(String), typeof(LoginControl), new PropertyMetadata());


     <Grid x:Name="LayoutRoot"> 
     <local:LabelTextBox Height="37" Margin="10,24,43,0" VerticalAlignment="Top" Label="{Binding UserNameLabel}"/>
 </Grid>

...

Второй элемент управления Я также могу создать элемент управления LabelTextBox и установить для него собственный источник родственников с аналогичным свойством Label.

...

        public String Label
    {
        get { return (String)GetValue(LabelProperty); }
        set { SetValue(LabelProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Label.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty LabelProperty =
        DependencyProperty.Register("Label", typeof(String), typeof(LabelTextBox), new PropertyMetadata(String.Empty));

...

   <Grid x:Name="LayoutRoot">
    <TextBlock Height="17" VerticalAlignment="Top" TextWrapping="Wrap" Text="{Binding Label}"/>

Однако, если я хочу вложитьLabelTextBox в первом пользовательском контроле. Кажется, я не могу поставить привязку к свойству Label свойства LabelTextBox, которое привязывается к свойству UserNameText.

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

Пожалуйста, помогите мне с этим.

1 Ответ

0 голосов
/ 01 сентября 2010

Нет, это не очень хороший подход, вы не должны предполагать, что у вас есть контроль над любым общедоступным свойством UserControl, включая DataContext.

Когда я хочу связать свойствоэлемент к свойству, содержащему UserControl Я использую этот подход: -

 <Grid x:Name="LayoutRoot">
   <TextBlock Text="{Binding Parent.Label, ElementName=LayoutRoot}" />
 </Grid>

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

В этом подходе вам не нужно разбираться сс DataContext.

...