2017-02-01 12 views
0

У меня есть UserControl называется BranchFilter, со следующим свойством:Почему свойство зависимостей в пользовательском UserControl не распознается?

private int? _branchId; 
public int? LocalBranchId 
{ 
    get { return _branchId; } 
    set 
    { 
     SetProperty(ref _branchId, value); 
     OnBranchChanged(); 
    } 
} 

В том же контролем, зарегистрировать свойство зависимостей, так что я могу связать ветку идентификатор к ViewModel:

public static readonly DependencyProperty BranchIdProperty = DependencyProperty.Register(nameof(LocalBranchId), typeof(int?), typeof(BranchFilter), new UIPropertyMetadata(null)); 

И когда я пытаюсь получить доступ к этому свойству, даже не привязывая его к виду, например:

<controls:BranchFilter Grid.Row="0" BranchId="0"> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="BranchChanged"> 
      <i:InvokeCommandAction Command="{Binding LoadItems}" /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</controls:BranchFilter> 

Я получаю ошибки компиляции:

Участник "BranchId" не признан или недоступен.

Свойство 'BranchId' не найдено в типе 'BranchFilter'.

Свойство «BranchId» не существует в пространстве имен XML «CLR-имен: ApptBook.Client.Modules.Common.Controls»

Я следовал каждый пример, но они все равно , для добавления свойства зависимостей, но все, что я пробовал, потерпело неудачу. Что может быть неправильно с чем-то таким простым?

+2

Я предполагаю, что это должно быть LocalBranchIdProperty –

+1

Использовать фрагмент кода 'propdp' для генерации свойства зависимостей * правильно *. – Sinatr

+0

@Sinatr У меня нет фрагмента. – ProfK

ответ

2

Если вы не используете его, используя LocalBranchId вместо BranchId?

<controls:BranchFilter Grid.Row="0" LocalBranchId="0"> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="BranchChanged"> 
      <i:InvokeCommandAction Command="{Binding LoadItems}" /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</controls:BranchFilter> 

Я также хотел бы переименовать DependencyProperty от BranchIdProperty к LocalBranchIdProperty.

+0

А, да. Я неправильно понял регистрацию свойств зависимостей, чтобы создать оболочку вокруг свойства POCO, но она фактически регистрирует свойство POCO как свойство зависимостей, поэтому я все равно должен получить доступ к POCO, и у него будет поведение свойства зависимостей. – ProfK

1

Вы должны правильно объявить LocalBranchId как свойство зависимостей:

public static readonly DependencyProperty LocalBranchIdProperty = 
    DependencyProperty.Register(
     nameof(LocalBranchId), typeof(int?), typeof(BranchFilter)); 

public int? LocalBranchId 
{ 
    get { return (int?)GetValue(LocalBranchIdProperty); } 
    set { SetValue(LocalBranchIdProperty, value); } 
} 

Если вам нужно, чтобы получить уведомление, когда изменяется значение свойства, вы можете зарегистрировать PropertyChangedCallback по PropertyMetadata:

public static readonly DependencyProperty LocalBranchIdProperty = 
    DependencyProperty.Register(
     nameof(LocalBranchId), typeof(int?), typeof(BranchFilter), 
     new PropertyMetadata(LocalBranchIdPropertyChanged)); 

public int? LocalBranchId 
{ 
    get { return (int?)GetValue(LocalBranchIdProperty); } 
    set { SetValue(LocalBranchIdProperty, value); } 
} 

private static void LocalBranchIdPropertyChanged(
    DependencyObject obj, DependencyPropertyChangedEventArgs e) 
{ 
    var control = (BranchFilter)obj; 
    var id = (int?)e.NewValue; 
    ... 
} 

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

  • Нет связанных вопросов^_^