是否有一行相当于:
<UserControl.DataContext>
<viewModel:MyViewModel />
</UserControl.DataContext>
类似的东西:
<UserControl MyUserControl
...
DataContext={SomeMarkupClassIGuess viewModel:MyViewModel}
...
/>
...
</UserControl>
答案 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的未来版本中。