【问题标题】:How to create user defined converter() equivalent function replacing converter(defined in IValueConverter)如何创建用户定义的转换器()等效函数替换转换器(在 IValueConverter 中定义)
【发布时间】:2014-05-14 07:37:23
【问题描述】:

我是 c# silvelight5 初学者,我必须创建自己的 Converter() 函数,该函数必须类似于从 IValueConverter 接口派生的 Converter() 函数。

我现在有什么数据? 我已经正确反序列化了 xml,在反序列化时我得到了这个:

XmlSerializer deserializer = new XmlSerializer(typeof(Parameter));//this Parameter is class obtained from(Root node of xml) and "parameter" is object.
XmlReader reader = XmlReader.Create(new StringReader(xmlstring));
Parameter parameter = (Parameter)deserializer.Deserialize(reader);
foreach (var item in parameter.Component.Attributes.Items)
{
    Debug.WriteLine(item);//It works correctly i have debugged
}

如您所见,我有对象 parameter,它现在包含 xml 元素和根(我的意思是所有数据)。 现在使用这个对象,我尝试创建像这样的 Converter 等效项(他的代码也在同一个类中):

ICollection<Parameter> list = parameter as ICollection<Parameter>;// **Problem creating line**
List<UIElement> result = new List<UIElement>();   

您可以看到这个"parameter" 是从反序列化中获得的,并且我在调试时确定它已正确反序列化。 所以在这里我将转换器()的"value"替换为"parameter"

问题是当我调试并看到参数包含所有反序列化的 xml 但我不知道为什么“列表”总是显示 null ?即使我可以看到所有 xml 元素(我的意思是节点值)调试但为什么“参数”没有分配给“列表”? (我猜它显示 null 因为这个参数是 Parameter 类型。但是如何使它在当前上下文中使用?)

有人可以纠正我并给我写一个相当于 Converter() 的方法,我们已经从反序列化 xml 中获得了对象?会有很大的帮助。

【问题讨论】:

  • Parameter 是复杂类型的实例,但您正试图将其转换为 ICollection&lt;Parameter&gt;。您希望它如何工作?参数类是否实现ICollection&lt;Parameter&gt;
  • @SriramSakthivel 不,它不知道,但你知道其他方法来实现转换器()功能给定从 deserializd xml 获得的对象使用这个对象我必须呈现 UIElements。
  • 不清楚你需要什么。你在找这个吗? ICollection&lt;Parameter&gt; list = new List&lt;Parameter&gt; { parameter };
  • @SriramSakthivel 我必须在不使用内置 Converter() 函数的情况下实现 Converter() 功能。如您所知,它的原始结构是这样的:“public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfoculture)”其中“value”实际上是包含Parameter类对象的对象。因此,在当前情况下,我已经在反序列化 xml 时获得了对象,它是“参数”(来自 Parameter 类,它是我的 xml 的根类/元素)。
  • 所以我要做的是实现 Converter() 功能,我们已经有了“参数”对象,所以我们可以这样做:ICollection list = parameter as ICollection;列表 结果 = 新列表();

标签: c# .net converter xml-deserialization ivalueconverter


【解决方案1】:

我终于找到了这个的解决方案实际上没有必要这样做:

ICollection<Parameter> list = parameter as ICollection<Parameter>;// **Problem creating line**
List<UIElement> result = new List<UIElement>(); 

我们可以直接使用从:获取的参数对象:

Parameter parameter = (Parameter)deserializer.Deserialize(reader);

并设置 if() 条件来访问所需的 xml 元素/类值(或者你可以说节点)不需要创建列表。

【讨论】:

    猜你喜欢
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多