[英]WP7 - Data bound value in custom control, how to set default string so it's visible in designer
我对 WP7 相当陌生,对 Expression Blend 完全陌生。
我有一个绑定到自定义对象列表的 ListBox,
List<Person>
列表中的每个项目都包含一个自定义控件 MyControl,它绑定到 Person。
MyControl 包含一个绑定到 Person 的 Username 属性的 TextBox。
所有这一切都很好。 我的问题是:如何为 TextBlock 设置默认值,以便它在 Designer 或 ExpressionBlend 中可见? 由于它是数据绑定的,它在运行之前没有文本......所以我实际上无法使用这些美妙的工具做任何花哨的样式,除非我反复删除绑定代码以将其替换为字符串,进行更改,替换绑定代码,重复。 似乎长篇大论!
谢谢,
史蒂文
你想要的是“设计时数据”。
有很多方法可以做到这一点。 幸运的是,网上也有很多资源可以解释它。
@Steven您是否查看过在Blend中创建示例数据以执行您需要的操作,然后进行一些绑定以将数据实际附加到绑定到您的列表的控件? 您可能想查看Blend Sample Data ,因为它会引导您完成一个简单的示例。 然后,您可能能够适应自己的目的。
这取决于您是否使用任何 MVVM model。
如果您不使用 MVVM,我的建议是使用 Blend Sample 数据,快速且快速。
如果您是 MVVM Light,我发现创建两个文件非常有用: DataService.cs - 包含真实连接和数据 DesignDataService.cs - 包含示例数据
从调用的角度来看,这两个库是相同的,因此您可以在 ViewModelLocator 中交换它们:
if (ViewModelBase.IsInDesignModeStatic)
{
SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
}
else
{
//SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
SimpleIoc.Default.Register<IDataService, DataService>();
}
在设计 class 中,我决定为每个 Model 创建一个 XML 文件,以便轻松更改示例数据并测试所有可能的场景。
然后我使用 Deserialize function 来阅读它:
csNodeList _Copyrights = new csNodeList();
resource = System.Windows.Application.GetResourceStream(new Uri(@"Design/sampledata.xml", UriKind.Relative));
streamReader = new StreamReader(resource.Stream);
serializer = new XmlSerializer(typeof(csNodeList));
_Copyrights = (csNodeList)serializer.Deserialize(streamReader);
请注意,文件 sampledata.xml 必须存储在文件夹 Design 中,并且必须定义为 Content 而不是 Resource。 建议提高性能和加载时间。
米
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.