el2*_*ot2 95 data-binding wpf xaml design-time designer
我正在使用没有表达式混合,只使用vs2010中的XAML编辑器.除此之外,我越来越多地看到了对设计时数据绑定的需求.对于简单的情况,该FallbackValue
属性非常好用(Textboxes和TextBlocks等).但特别是在处理ItemsControl
等时,确实需要在设计器中显示样本数据,以便您可以调整和调整控件和数据模板,而无需运行可执行文件.
我知道ObjectDataProvider
允许绑定到一个类型,因此可以提供可视化的设计时数据,但是有一些杂耍,允许绑定真实的运行时数据,而不通过加载设计时加载浪费资源, dummied数据和运行时绑定.
我真正想要的是能够拥有,比如"John","Paul","George"和"Ringo"在XAML设计师中作为我的可设置项目出现ItemsControl
,但是当应用程序显示真实数据时运行.
我也知道Blend允许一些花哨的属性来定义WPF在运行时条件下有效忽略的设计时绑定数据.
所以我的问题是:
1.我如何利用visual studio XAML设计器中的集合和非平凡数据的设计时绑定,然后平滑地交换到运行时绑定?
2.其他人如何解决这个设计时与运行时数据问题?就我而言,我不能很容易地为两者使用相同的数据(例如,数据库查询可以使用相同的数据).
3.他们可以用于数据集成XAML设计的表达混合替代品吗?(我知道有一些替代方案,但我特别想要一些我可以使用的东西,看看绑定的样本数据等?)
Gor*_*ran 119
使用VS2010,您可以使用Design-Time属性(适用于SL和WPF).我通常有一个模拟数据源,所以它只是一个问题:
添加名称空间声明
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
Run Code Online (Sandbox Code Playgroud)将模拟数据上下文添加到窗口/控制资源
<UserControl.Resources>
<ViewModels:MockXViewModel x:Key="DesignViewModel"/>
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)设置设计时数据上下文
<Grid d:DataContext="{Binding Source={StaticResource DesignViewModel}}" ...
Run Code Online (Sandbox Code Playgroud)效果很好.
Joh*_*ger 11
作为Goran接受的答案和Rene的优秀评论.
添加名称空间声明.
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
从代码中引用您的设计时数据上下文.
<Grid d:DataContext="{d:DesignInstance Type=ViewModels:MockXViewModel, IsDesignTimeCreatable=True}" ...
我使用这种方法通过 .NET 4.5 和 Visual Studio 2013 生成设计时数据。
我只有一个 ViewModel。视图模型有一个属性IsInDesignMode
,它告诉设计模式是否处于活动状态(参见 class ViewModelBase
)。然后您可以在视图模型构造函数中设置您的设计时数据(如填充项目控件)。
此外,我不会在视图模型构造函数中加载真实数据,这可能会导致运行时出现问题,但在设计时设置数据应该不是问题。
public abstract class ViewModelBase
{
public bool IsInDesignMode
{
get
{
return DesignerProperties.GetIsInDesignMode(new DependencyObject());
}
}
}
public class ExampleViewModel : ViewModelBase
{
public ExampleViewModel()
{
if (IsInDesignMode == true)
{
LoadDesignTimeData();
}
}
private void LoadDesignTimeData()
{
// Load design time data here
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
34814 次 |
最近记录: |