我正在创建自定义控件,因为我需要在样式/模板中进行大量绑定,因此使用MVVM非常有意义。那么我在哪里声明依赖属性?
他们是否留在对照班?如何将它们链接到VM?
答案 0 :(得分:4)
有关自定义控件和视图模型,请参阅my answer to your other question。这是简短版本:
换句话说,边框或按钮的视图模型是什么?答:他们没有,因为他们只是控制。 UserControls具有视图模型,但控件只是呈现并与您提供的数据交互(在UserControl中的位置?)。对于经验丰富的MVVM开发人员来说,自定义控件开发可能是最困难的事情:你的反射是创建一个视图模型,但不幸的是,这种反射是错误的。我知道,因为我自己犯了这个错误。
答案 1 :(得分:1)
依赖属性可以在它们所属的控件中声明。
在WPF / Silverlight中跟踪MVVM时,常见的方法是将ViewModel设置为相应View的DataContext。因此,您可以使用XAML中的Bindings将自定义依赖项属性链接到ViewModel属性。
假设您已经将ViewMosel设置为View:
的DataContextvar view = new UserView
{
DataContext = new UserViewModel { Name = "Custom Name" }
};
public class UserViewModel
{
string Name { get; set; }
}
<强> UserView.xaml:强>
<TextBlock Text="{Binding Name}" />
答案 2 :(得分:0)
创建自定义控件时,控件本身就是一个视图模型。在其上声明依赖项属性以公开自定义控件的用户可以利用的绑定。例如,如果您有时间轴控件,则可能将控件上的StartDate和EndDate等属性公开为依赖项属性。您的控件默认模板将对依赖项属性进行模板绑定。然后,您的控件的使用者可能具有项目时间轴视图模型,该视图模型将绑定到控件上的属性。
自定义控件的主要目的是为该行为提供易于覆盖的行为和默认外观(通过提供新模板)。希望这会有所帮助。