如何使用MVVM灯从CustomControl引用视图模型

时间:2015-02-25 09:34:41

标签: c# wpf mvvm-light

我曾经使用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标记。

2 个答案:

答案 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实例,这可能会更方便。