使用DependencyProperties和后备对象设计WPF用户控件

时间:2010-06-28 17:17:47

标签: c# wpf dependency-properties

我的业务层中有一个对象(例如,让我们称之为Car),我创建了一个UserControl(CarIcon)。用户控件具有Car对象的属性,当Car对象设置时,它调用一个方法来配置用户控件的各种属性。

现在我正在重写它以使用依赖项属性,以便我可以使用数据模板并在运行时将后备Car对象绑定到CarIcon用户控件。理想情况下,我想将对象绑定到用户控件并让用户控件自动更新它的显示。

似乎没有设置依赖项属性,并且应用程序显示空白图标(因为没有支持对象,没有要显示的数据)。我绑错了吗?

这也是一种合理的方法(考虑到我不想为一个简单的控件实现一个完整的MVVM)?

将汽车绑定到xaml中的CarIcon

<ItemsControl Name="m_itemsControl" Focusable="false"
    pixellabs:AnimatingTilePanel.ItemHeight="100" pixellabs:AnimatingTilePanel.ItemWidth="300">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <pixellabs:AnimatingTilePanel Width="300" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <sample:CarIcon CurrentCar="{Binding}" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

依赖项属性的代码

    public Car CurrentCar {
        get { return (Car)GetValue( CarProperty ); }
        set { SetValue( CarProperty, value ); }
    }

    public static readonly DependencyProperty CarProperty =
        DependencyProperty.Register( 
            "CurrentCar", 
            typeof( Car ), 
            typeof( CarIcon ), 
            new UIPropertyMetadata() );

1 个答案:

答案 0 :(得分:0)

将第一个参数更改为属性名称(CurrentCar而不是Car)。您还应该提供一些默认值,例如null或new Car()

public static readonly DependencyProperty CarProperty = 
        DependencyProperty.Register(  
            "CurrentCar",  
            typeof(Car),  
            typeof(CarIcon),  
            new UIPropertyMetadata(new Car()));