2015-03-30 3 views
0

У меня есть пользовательский элемент управления named- RoomAndPersonsAccommodationItem и внутри меня есть недвижимость в номере:МОФ таможенного контроля локального свойства связывания

public static readonly DependencyProperty roomProperty = 
DependencyProperty.Register("Room", typeof(RoomData), 
typeof(RoomAndPersonsAccommodationItem), new FrameworkPropertyMetadata(null)); 

     public RoomData RoomProperty 
     { 
      get { return GetValue(roomProperty) as RoomData; } 
      set { SetValue(roomProperty, value); } 
     } 


     private RoomData room = null; 
public RoomData Room 
     { 
      get { return room; } 
      set { room = value; } 
     } 

RoomAndPersonsAccommodationItem устанавливается как DataTemplate на ListView:

<ListView Name="RoomsListView" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" > 
        <ListView.ItemsPanel> 
         <ItemsPanelTemplate> 
          <StackPanel Orientation="Horizontal"></StackPanel> 
         </ItemsPanelTemplate> 
        </ListView.ItemsPanel> 
        <ListView.ItemTemplate> 
         <DataTemplate> 
          <Controls:RoomAndPersonsAccommodationItem Room="{Binding Path=., Mode=TwoWay}" HorizontalAlignment="Stretch" 
                     VerticalAlignment="Stretch" /> 
         </DataTemplate> 
        </ListView.ItemTemplate> 

       </ListView> 

В классе, где есть выше ListView- RoomsListView У меня есть этот код:

RoomsListView.ItemsSource = reservation.Rooms; 
//reservation.Rooms is List<RoomData> 

P p РОБЛЕМА здесь:

<Controls:RoomAndPersonsAccommodationItem Room="{Binding Path=., Mode=TwoWay}" HorizontalAlignment="Stretch" 
                      VerticalAlignment="Stretch" /> 

Я хочу, чтобы связать номер свойство объекта номер из ItemSource на ListView, но я получаю пустой. Кто-нибудь знает, где я ошибаюсь? Возможно, здесь: Room = "{Binding Path =., Mode = TwoWay}" или в декларации DependencyProperty?

Благодаря Martin

UPDATE:

Еще не работает ... Результат всегда равна нулю. Я попробовал много вариантов, чтобы привязать тег или DataContext, но ничего не происходит. Я полагаю, что проблема не в DependencyProperty. Это где-то в связывании я вещь ... Это код еще раз:

private ReservationData reservation = null; 
//Methods 
private void fillForms() 
     { 
      //Logic 
        RoomsListView.ItemsSource = reservation.Rooms; 
      //Logic 
     } 

Это ListView с DataTemplate:

<ListView Name="RoomsListView" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" > 
        <ListView.ItemsPanel> 
         <ItemsPanelTemplate> 
          <StackPanel Orientation="Horizontal"></StackPanel> 
         </ItemsPanelTemplate> 
        </ListView.ItemsPanel> 
        <ListView.ItemTemplate> 
         <DataTemplate> 
          <Controls:RoomAndPersonsAccommodationItem 
           Room="{Binding}" 
           HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> 
         </DataTemplate> 
        </ListView.ItemTemplate> 

       </ListView> 

И DependencyProperty в RoomAndPersonsAccommodationItem:

public static readonly DependencyProperty RoomProperty = 
    DependencyProperty.Register(
     "Room", typeof(RoomData), typeof(RoomAndPersonsAccommodationItem), 
     new FrameworkPropertyMetadata(null)); 

     public RoomData Room 
     { 
      get { return (RoomData)GetValue(RoomProperty); } 
      set { 
       SetValue(RoomProperty, value); } 
     } 

ОБНОВЛЕНИЕ 2

Это РЕШЕНИЕ Указанный выше источник является правильным. Неправильный результат исходил из того, что я проверил свойство «Комната» до завершения конструктора. Когда я проверил результат после конструктора, все было в порядке! Спасибо!

+1

Вы можете пометить ответ как разрешенный или ответить на свой собственный ответ, если нашли свое собственное решение. – Bart

ответ

0

Попробуйте это одно свойство и одно свойство зависимостей для этого свойства:

public static readonly DependencyProperty RoomProperty = 
    DependencyProperty.Register(
     "Room", typeof(RoomData), typeof(RoomAndPersonsAccommodationItem), 
     new FrameworkPropertyMetadata(null)); 

public RoomData Room 
{ 
    get { return (RoomData)GetValue(RoomProperty); } 
    set { SetValue(RoomProperty, value); } 
} 

Вы также можете удалить «Путь» из переплета, это не является необходимым.

+0

Установка 'Mode = TwoWay' также не нужна. 'Room =" {Binding} "' достаточно. – Clemens

+0

Эта работа для меня. Спасибо. – Martin

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