Windows Phone - DependencyProperties - PullRequest
       2

Windows Phone - DependencyProperties

3 голосов
/ 19 апреля 2011

Я пытаюсь заставить UserControl работать в Windows Phone 7. У меня есть несколько свойств, с которыми я хотел бы связать, но они не заполняются независимо от того, добавляю ли я их как DependencyProperties или нет.Единственный способ заставить их работать - это установить вместо них DataContext.Код, который я пробовал (для одного свойства):

public static readonly DependencyProperty MaximumItemsProperty = DependencyProperty.Register("MaximumItems", typeof(int), typeof(ManageIngredientsControl), new PropertyMetadata(0));
        /// <summary>
        /// Gets or sets the maximum number of items to match.
        /// </summary>
        /// <value>The maximum number of items to match.</value>
        public int MaximumItems
        {
            get { return Convert.ToInt32(base.GetValue(MaximumItemsProperty)); }
            set { base.SetValue(MaximumItemsProperty, value); }
        }

<TextBox Grid.Row="1" Grid.Column="1" x:Name="nudMaxIngredients" Width="120" Text="{Binding MaximumItems,Mode=TwoWay,ElementName=root}" InputScope="Number" />

Корневой элемент UserControl называется «root», но значение не заполняется.Единственный способ заставить его работать наполовину - это:

public int MaximumItems
{
    get { return Convert.ToInt32(DataContext) }
    set { DataContext =  value; }
}

Кажется, что-то мешает DataContext, но если я связываюсь с DependencyProperties, почему это важно?

1 Ответ

2 голосов
/ 19 апреля 2011

Я предполагаю, что ваш TextBox находится внутри вашего UserControl. Если так, то привязка ElementName имеет проблему, как описано здесь .

По сути, имя, которое вы даете UserControl в его XAML, перезаписывается любым именем, данным ему, где оно используется (т.е. на вашей странице).

Обходной путь должен использовать что-то вроде:

<TextBox Grid.Row="1" Grid.Column="1" x:Name="nudMaxIngredients" Width="120" Text="{Binding Parent.MaximumItems,Mode=TwoWay,ElementName=LayoutRoot}" InputScope="Number" />

Где LayoutRoot - это корневой элемент управления в XAML UserControl.

Кроме того, ваш первый подход к свойству MaximumItems верен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...