Vit*_*lyB 31 .net data-binding xaml
我将文本框绑定到对象,如下所示:
<TextBlock d:DataContext="{d:DesignInstance ViewModel:TaskVM }"
Text="{Binding Title}" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown">
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
现在我想知道如何在设计过程中显示模拟数据.我尝试过这样的事情:
<TextBlock Text="{Binding Path=Title}" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown">
<d:DesignProperties.DataContext>
<ViewModel:TaskVM Title="Mock"/>
</d:DesignProperties.DataContext>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
但是,由于TaskVM没有默认的ctor,我找到了"No default constructor".
我知道当我使用d:DataContext="{d:DesignInstance ViewModel:TaskVM }"它时会创建一个模拟数据类型.有没有办法让我设置这个模拟类型的属性?
谢谢!
Pav*_*kov 46
要在XAML中实例化类型,需要使用默认构造函数.作为一种解决方法,您可以简单地创建一个TaskVM具有默认构造函数的子类,并将其用作设计时数据上下文.
<TextBlock d:DataContext="{d:DesignInstance ViewModel:DesignTimeTaskVM }"
Text="{Binding Title}" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown">
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
另一种方法是设置d:IsDesignTimeCreatable为,False并在运行时为您创建替换类型(使用TaskVM类型作为"形状").
<TextBlock d:DataContext="{d:DesignInstance ViewModel:DesignTimeTaskVM, IsDesignTimeCreatable=False}"
Text="{Binding Title}" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown">
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
您可以向VM添加默认构造函数.然后,它可以检查它是否在设计时间并为其属性设置适当的设计时值.
另一种选择是使用静态类来保存视图模型并从XAML调用该类。这是一个例子:
xaml使用视图模型工厂来创建设计数据上下文:
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DataContext="{x:Static local:ViewModelFactory.ViewModel}"
Run Code Online (Sandbox Code Playgroud)
静态ViewModelFactory在其构造函数中构造视图模型,并将其存储在一个公共属性中,可以从外部(从XAML)对其进行访问:
public static class ViewModelFactory
{
/// <summary>
/// Static constructor.
/// </summary>
static ViewModelFactory()
{
ViewModel = new TypeOfViewModel(null);
// further configuration of ViewModel
}
public static TypeOfViewModel ViewModel
{
get; set;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,TypeOfViewModel该类没有无参数的构造函数。因此,在这种情况下,ViewModelFactory必须传递一些值null。
因此,在这种情况下,TypeOfViewModel需要以某种方式实现该类,该方式应知道在设计时传递的依赖项为null。
public class TypeOfViewModel
{
/// <summary>
/// Constructor.
/// </summary>
/// <param name="dependency">May be null at design time</param>
public TypeOfViewModel(SomeDependentClass dependency)
{
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21350 次 |
| 最近记录: |