gpt4 book ai didi

c# - WPF Datagrid IValueConverter ConvertBack 自己类的对象

转载 作者:太空宇宙 更新时间:2023-11-03 12:51:12 26 4
gpt4 key购买 nike

抱歉我的英语不好。

在 XAML 上,我通过 Datagridtextcolumn 中的转换器绑定(bind)我自己的类“Parameter”的对象。

XAML

<DataGridTextColumn Header="Min" Width="50" Binding="{Binding Path=., Converter={StaticResource MinMaxValueConverter}}">

C#

public class MinMaxValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
Parameter p = (Parameter)value;
if (p.Typ == Parameter.ParameterTyp.k1000) return p.LowerBorder;
else return p.LowerBorder.ToString("X4") + "h";

}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
...
return parameter;
}
}

我不知道如何写 CovertBack。 ConvertBack 被认为可以替换对象“Paramter”变量中的值而不更改其他变量或删除。但是如果不引用这个对象我怎么能这样做呢?我尝试将对象绑定(bind)到 ConverterParameter,但它不起作用。

我需要“Parameter.Typ”的值才能知道如何将其转换回来。一个想法是使用“Parameter.Typ”和“Parameter.LowerBurder”进行多重绑定(bind),但我无法在不知道实际行中的 Typ 的情况下转换 Back。

让我意识到我所有的错误!!!

最佳答案

一般来说:ConvertBack() 方法需要接受存储在绑定(bind)目标中的当前值,并将其转换回绑定(bind)源所需的类型。

很遗憾,您没有提供好的Minimal, Complete, and Verifiable example这清楚地表明你在做什么。除非您这样做,否则无法提供保证解决您的具体问题的答案。但是根据您提供的信息,可以提出一些基本的观察和建议:

  1. 首先,您的 Convert() 方法似乎有两种基本模式:如果源值的 Typ 属性的值为 k1000,然后直接返回 LowerBorder 属性值。否则,您将 LowerBorder 属性值格式化为一个字符串(显然是一个十六进制值)并返回它。
  2. 由于在某些情况下您将 LowerBorder 值格式化为十六进制字符串,因此假设此属性具有整数类型似乎是合理的,例如int.
  3. 要转换回来,您需要能够区分这两种情况,并反转转换。您实现的转换所导致的目标值中最明显的差异是尾随 h 字符,这种情况会出现在一种情况下,而另一种情况下则不会。那么,让我们使用它吧。

在这种情况下,您可以像这样编写您的 ConvertFrom() 方法:

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
string text = (string)value;

return text[text.Length - 1] == 'h' ?
return FromHexString(text) :
return FromInt32(text);
}

哪里:

Parameter FromHexString(string text)
{
Parameter parameter = new Parameter();

parameter.Typ = Parameter.ParamaterTyp.k1001;
parameter.LowerBorder = int.Parse(
text.Substring(0, text.Length - 1), NumberStyles.AllowHexSpecifier);
}


Parameter FromInt32(string text)
{
Parameter parameter = new Parameter();

parameter.Typ = Parameter.ParamaterTyp.k1000;
parameter.LowerBorder = int.Parse(text);
}

注意:当值是十六进制时,我不知道Typ值应该是多少,所以我只是编了一个新的值名称k1001 用于示例的目的。实际上,如果有多个 Typ 值是可能的,您将不得不判断要使用哪个 Typ 值,否则您将拥有更改源到目标的转换以保留信息(例如,根据 Typ 值使用不同的尾随字符)。

如果以上内容不足以让您理解 ConvertBack() 方法需要执行的操作,并根据您的需要实现该方法,请改进您的问题,使其包含一个好的代码示例,以及关于代码应该在每种情况下做什么的具体细节。

关于c# - WPF Datagrid IValueConverter ConvertBack 自己类的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35461582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com