繁体   English   中英

wpf自定义控件本地属性绑定

[英]wpf custom control local property binding

我有一个名为-RoomAndPersonsAccommodationItem的自定义控件,而我里面有Property Room:

 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的设置类似于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 Path=., Mode=TwoWay}" HorizontalAlignment="Stretch" 
                                                                      VerticalAlignment="Stretch" />
                        </DataTemplate>
                    </ListView.ItemTemplate>

                </ListView>

在上面的ListView- RoomsListView的类中,我有以下代码:

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

问题在这里:

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

我想将Room属性从ListView上的ItemSource绑定到room对象,但是却收到null。 有人知道我错了吗? 也许在这里:Room =“ {Binding Path =。,Mode = TwoWay}”或DependencyProperty声明?

谢谢马丁

更新:

仍然不起作用...结果始终为null。 我尝试了很多类似的方法来绑定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); }
        }

更新2

已解决上面的来源是正确的。 错误的结果是我在构造函数完成之前检查了Room属性。 当我在构造函数之后检查结果时一切正常! 谢谢!

尝试一下,为此属性提供一个属性和一个依赖项属性:

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

您也可以从绑定中删除“路径”,这不是必需的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM