2011-11-03 62 views
2

我创建自定义控件,因为我需要在样式/模板内部进行大量的绑定,所以使用MVVM完全有意义。我在哪里声明依赖属性呢?自定义控件,查看模型和依赖属性

他们留在控制课上吗?我如何将它们链接到VM?

回答

4

my answer to your other question约自定义控件和视图模型。这里的简短版本:

  1. 自定义控件不应该有视图模型。
  2. 请勿设置您自己的控件的数据上下文。这是为消费者保留的。
  3. 所有的依赖项属性应该在MyCustomControl.cs文件中声明。
  4. 在你的genric.xaml中使用TemplateBinding,因为Binding更有效率。

换句话说,边界或按钮的视图模型是什么?答:他们没有一个,因为他们只是控件。 UserControls拥有视图模型,但控件只是呈现并与您给它们的数据交互(在UserControl中)。对于经验丰富的MVVM开发人员来说,自定义控件开发可能是最困难的事情:您的反应是制作视图模型,但这种反射不幸是错误的。我知道是因为我自己犯了这个错误。

+0

加1,这应该是正确的答案 –

1

依赖属性可能会在它们所属的控件中被拖动。

当在WPF/Silverlight中跟随MVVM时,常用的方法是将ViewModel设置为相应View的DataContext。因此,您可以使用XAML中的绑定将自定义的依赖属性链接到ViewModel属性。

让我们假设你已经设置ViewMosel到视图的DataContext:

var view = new UserView 
       { 
       DataContext = new UserViewModel { Name = "Custom Name" } 
       }; 

public class UserViewModel 
{ 
    string Name { get; set; } 
} 

UserView.xaml:

<TextBlock Text="{Binding Name}" /> 
+0

这是你如何使用usercontrol,而不是自定义控件 –

+1

@Xin:我忽略了一个自定义控制点 – sll

+0

@Xin:实际上据我所知,我已经使用自定义控件而没有模板绑定方法,但直接在View.Xaml中指定绑定,例如''所以这应该不是问题 – sll

0

创建自定义控件时,控件本身是视图模型。在其上声明依赖性属性以公开自定义控件的用户可以利用的绑定。例如,如果您有时间轴控件,则可能会将控件上的StartDate和EndDate等属性显示为依赖项属性。您的控件默认模板将使模板绑定到依赖项属性。然后,您的控件的使用者可能会拥有一个项目时间线视图模型,以便将其绑定到控件上的属性。

自定义控件的主要目的是提供易于覆盖的行为和默认外观(通过提供新模板)。希望这可以帮助。

相关问题