2015-03-30 32 views
0

我有named- RoomAndPersonsAccommodationItem和內部自定義控件我有產權房:WPF自定義控件本地地產結合

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這裏是:

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

我想從ListView上的ItemSource綁定Room屬性到房間對象,但我收到null。 有誰知道我錯在哪裏?也許在這裏:Room =「{Binding Path =。,Mode = TwoWay}」或DependencyProperty聲明?

感謝 馬丁

UPDATE:

還不行......結果始終爲空。我嘗試了很多選項來綁定Tag或DataContext,但沒有任何反應。我想這個問題不在DependencyProperty中。它是介於結合我的事情...... 這再次驗證碼:

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

這是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}" 
           HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> 
         </DataTemplate> 
        </ListView.ItemTemplate> 

       </ListView> 
在RoomAndPersonsAccommodationItem

而且DependencyProperty的:

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); } 
     } 

UPDATE 2

已解決 上面的來源是正確的。錯誤的結果來自於我在構造函數完成之前檢查了房間屬性。當我檢查構造函數後的結果一切正常!謝謝!

+1

如果您找到自己的解決方案,您可以將答案標記爲已解決或回答自己的答案。 – Bart 2015-04-01 06:49:48

回答

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 2015-03-30 21:31:50

+0

這個工作適合我。謝謝。 – Martin 2015-03-31 21:34:29