2012-02-05 6 views
1

Мое решение реализовано в MVVM. Представление представляет собой окно, в котором находится пользовательский контроль. Я создал свойство зависимостей для этого UserControl, как показано ниже:Связывание свойств зависимостей в UserControl

public static DependencyProperty ListProperty = DependencyProperty.Register(
     "ItemsList", typeof(List<RequiredClass>), typeof(UsercontrolTest)); 

public List<RequiredClass> ItemsList 
{ 
    get { return (List<RequiredClass>)GetValue(ListProperty); } 
    set 
    { 
     SetValue(ListProperty, value); 
    } 
} 

Это свойство привязан к моей ViewModel собственности (LISTOFITEMS) в XAML:

<Window x:Class="TestProject.MainWindow" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:Test="clr-namespace:TestProject" 
      Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition></RowDefinition>    
      <RowDefinition></RowDefinition> 
     </Grid.RowDefinitions> 
     <Test:UserControlTest Grid.Row="0" ItemsList="{Binding Path=ListOfItems}" /> 
     <Button Grid.Row="1" Content="AddItems" Click="Button_Click" /> 
    </Grid> 
</Window> 

Также я инициализирован DataContext окна в codebehind к viewmodel. Проблема в том, что привязка никогда не происходит, и свойство set никогда не вызывается для свойства зависимостей. Я что-то упустил?

ответ

9

Эти геттеры и сеттеры никогда не вызываются системой связывания (поэтому вы не должны размещать там дополнительный код). Свойство, вероятно, установлено, но если вы не сделаете что-то с ним в объявлении UserControl, ничего не будет отображаться. например

<UserControl Name="control" ...> 
    <ItemsControl ItemsSource="{Binding ItemsList, ElementName=control}" /> 
</UserControl> 
+0

Взрыв на этом именно то, что происходило. Поскольку я не могу поставить код в сеттер, любая идея, как я могу определить, изменился ли мой список и выполнить какой-то код? –

+0

@AabidAli: вы можете использовать ['ObservableCollection'] (http://msdn.microsoft.com/en-us/library/ms668604.aspx), который запускает событие при изменении, не уверен, что именно вы пытаетесь сделать, хотя ... –

+0

@ HB Я имел в виду изменение свойства зависимости. Np я получил его, вам просто нужно добавить метаданные свойств при инициализации dp для обработки propertychanged. Спасибо за вашу помощь –

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