繁体   English   中英

WP7 - 自定义控件中的数据绑定值,如何设置默认字符串以便在设计器中可见

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM