仅使用c#代码使用IValueConverter呈现UI

我是c#和silverlight-5初学者。

首先,我必须通过反序列化xml字符串来创建对象。 我已经成功完成了这项工作,但现在我的下一步是使用对象元素创建GUI。 我知道我必须使用“ IValueConverter ”才能做到这一点。 但我怎么不知道。

包含该对象的我的Program类是这样的:

 using System; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.Runtime.Serialization.Json; using System.Runtime; using System.Xml.Serialization; using System.Runtime.Serialization; using System.IO; using System.Collections.Generic; using System.Diagnostics; using System.Xml; using System.Collections; namespace Model.XML { public class ProgramControl { public static void Main() { string xmlstring = @"  max_amount  Millions  Combo  Integer 4 0  5 10 20 50    "; XmlSerializer deserializer = new XmlSerializer(typeof(Parameter)); XmlReader reader = XmlReader.Create(new StringReader(xmlstring)); Parameter parameter = (Parameter)deserializer.Deserialize(reader); foreach (var item in parameter.Component.Attributes.Items) { Debug.WriteLine(item); } Debug.WriteLine(parameter.Component.Type); Debug.WriteLine(parameter.Name); Debug.WriteLine(parameter.Label); Debug.WriteLine(parameter.Unit); } } } 

现在的问题是我如何从反序列化(IValueConverter)获得的对象创建GUI?

编辑:我不知道如何实现它:

首先是在包含“IValueConverter”接口的类中我们必须转换(使用Convert()函数)对象(在反序列化时获得)到参数然后传递那些参数(包含在c#中创建的combobox)通过return到xaml codewhich包含用于呈现我们刚刚使用c#创建的GUI的容器。

在Xaml代码中,我们只需要创建容器,该容器将显示combobox以及我们在上一步中使用c#代码创建的其他标签和文本。 (我们不必在这里使用xaml创建combobox,它是在包含IValueConverter接口的类中的c#代码中创建的,它返回UI)。

例如:(很难让你理解正确,可能会出现一些语法错误):

我的“MyValueConverter.cs”类假设为:

 public class MyValueConverter : IValueConverter { #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { List list = value as List; List result = new List(); foreach(parameter p in list) { UIElement newEle = null; if (p.component.type == "Combo") { newEle = new ComboBox(); } result.add(newEle); } return result; ///////////////////////////////////////////////// //////////////// and so on :///////////////////// ///////////////////////////////////////////////// } } 

而在xaml文件中,我必须创建一个容器来呈现在c#(IValueConverter接口类)中创建的UI。 所以我们必须选择任何必须能够渲染combobox的容器,标签,文本快照GUI中显示的所有数据(conatiner可能是StackPanel,因为有多个东西要显示)

我的xaml代码只是包含一个像这样的容器:

         

请帮忙实现它吗? 请不要犹豫,询问是否还不明白。

您可以使用隐式数据类型。

在您的xaml中,您可以为特定数据类型定义模板:

        

您最好根据type-element值创建不同的类型。 另一种解决方案是为Parameter类型创建一个大模板,并根据Parameter-type包含的内容显示相应的元素。 但我不推荐这种方法。

然后,您可以使用ItemsControl显示所有参数:

  

不同的参数将根据其具有的类型以不同的方式呈现。