在XAML中是否有一行等效于DataContext属性初始化?

时间:2014-12-03 14:08:01

标签: wpf xaml

是否有一行相当于:

<UserControl.DataContext>
    <viewModel:MyViewModel />
</UserControl.DataContext>

类似的东西:

<UserControl MyUserControl
             ...
             DataContext={SomeMarkupClassIGuess viewModel:MyViewModel}
             ...
             />
        ...
</UserControl>

1 个答案:

答案 0 :(得分:2)

您需要{x:Instance} MarkupExtension。

不幸的是,这样的事情不存在。

但是,创建非常容易:

public class InstanceExtension : MarkupExtension
{
    private readonly Type TargetType;

    public InstanceExtension(Type targetType)
    {
        this.TargetType = targetType;
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return Activator.CreateInstance(TargetType);
    }
}

然后使用:

<Window x:Class="WpfApplication8.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication8"
        Title="MainWindow" Height="350" Width="525">
    <TextBlock DataContext="{local:Instance local:SomeClass}" Text="{Binding}"/>
</Window>

我为Microsoft创建了一个UserVoice feature request,以便在WPF中包含此功能:

请点击上面的链接并提交请求,以便他们考虑将其包含在WPF的未来版本中。