我曾经使用MVVM-light定位器将xaml中 UserControl 的datacontext设置为viewmodel。 e.g:
DataContext="{Binding SplashMainViewModel, Mode=OneWay, Source={StaticResource Locator}}"
这是在xaml中的视图标记中完成的。
如何将 CustomControl 的datacontext设置为viewmodel?在VS中,使用以下命令创建自定义控件:
public class CustomControl1 : Control
{
static CustomControl1()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1),new FrameworkPropertyMetadata(typeof(CustomControl1)));
}
}
但它没有通常的xaml标记。
答案 0 :(得分:0)
尝试类似:
public class CustomControl1 : Control
{
static CustomControl1()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1),new FrameworkPropertyMetadata(typeof(CustomControl1)));
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
DataContext = ((MyLocatorType)Resources["Locator"]).SplashMainViewModel;
}
}
...或将其设置在模板的XAML中(Themes\Generic.xaml
)。
答案 1 :(得分:0)
Rico Suter演示了如何为CustomControl1的所有实例设置CustomControl1的DataContext。我猜这是你想要做的。
您可以使用常规方法在CustomControl1的特定实例上设置DataContext(在声明它的xaml中)。我猜这不是你想要做的,但我包括完整性。如果只有一个CustomControl1实例,这可能会更方便。