- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
抱歉我的英语不好。
在 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这清楚地表明你在做什么。除非您这样做,否则无法提供保证解决您的具体问题的答案。但是根据您提供的信息,可以提出一些基本的观察和建议:
Convert()
方法似乎有两种基本模式:如果源值的 Typ
属性的值为 k1000
,然后直接返回 LowerBorder
属性值。否则,您将 LowerBorder
属性值格式化为一个字符串(显然是一个十六进制值)并返回它。LowerBorder
值格式化为十六进制字符串,因此假设此属性具有整数类型似乎是合理的,例如int
.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/
我正在尝试将枚举转换为画笔,以便可以使用枚举变量来控制某些控件的颜色 我的枚举(并不真正相关): public enum Colors { Red, Blue, } 这是我的转
我正在使用 .NET 3.5 我有一个 DataGridTextColumn,我想在该列的值为 false 时将背景颜色变为红色。我已经在 XMAL 中看到了这一点,但无法弄清楚如何在代码隐藏中做到这
我有一个 Enum 需要显示在 ComboBox 中。我已经设法使用 ItemsSource 将枚举值获取到组合框,并且我正在尝试将它们本地化。我认为这可以使用值转换器来完成,但由于我的枚举值已经是字
在谷歌上搜索这个问题几个小时,但看不出我哪里出错了。 我有以下转换器,它只返回 Brushes.Red(也尝试过 Colors.Red),但仍然没有成功。 public class ColorConv
我正在尝试创建一个 IValueConverter,它接受一个 enum 并吐出一个 URI。转换器确实按预期在运行时工作。然而,XAML Designer 给我一个错误提示: Object must
我有一个简单的 IValueConverter,它只使用 TypeConverter 进行转换。但是,在某些情况下,提供的 TypeConverter 会失败。 如果转换器未提供 Binding,我想
我有一个具有 3 种通信状态的应用程序:已连接、已断开连接和待处理。通信状态由一些其他参数控制。我想在 IValueConverter 控制的屏幕上显示相应的图像。但我无法让它工作。 这是我包含 3
我有一个 ListView,它有一个包含两列和许多行的 Grid。每行在每一列中都有一个 TextBlock,每个 Text 属性都绑定(bind)到 ListView 的 ItemSource 中的
我有一个包含大约 12 个项目的解决方案,其中一个设置为启动项目,其中包含主窗口。目前我所有的 IValueConverter 都在这个项目中。 我现在想将它们移动到一个单独的项目中,该项目将只包含转
IValueConverter 的最佳实践是什么? : 可以将 Exception 放在 Convert 方法中还是应该返回“something”? 这是一个例子: [ValueConversion(
我正在使用自定义 DateTimeToString :IValueConverter 在我的 ConvertBack 方法中,当转换失败时我抛出异常,但是它没有显示为验证失败(这是一个未处理的应用程序
我有一个异步方法,我想在 IValueConverter 中触发它。 有没有比通过调用 Result 属性强制它同步更好的方法? public async Task Convert(object va
我有一个进度条,我想根据 bool 值更改颜色; true 为绿色,false 为红色。我的代码看起来应该可以工作(当我将它绑定(bind)到文本框时它返回正确的值),但当它是进度条的颜色属性时却不行
我正在尝试使用 IValueConverter 将集合转换为代理对象以进行数据绑定(bind)。 转换器似乎工作正常,但问题是在集合中添加或删除新对象时。 View 中没有刷新相同的.. 模型对象:
我为自定义控件创建了一个 .cs 类,其中包含以下属性: //Property which is defining the unit of the textblock in the Ringsli
有谁知道是否可以对基于 IValueConverter 的类进行数据绑定(bind)? 我有以下转换器: [ValueConversion(typeof(int), typeof(Article))]
好吧,(在写了几次之后)发现System.Windows.Controls命名空间中已经有一个BooleanToVisibilityConverter,这真是一个惊喜。 可能还有更多这样隐藏的节省时间
我有这个代码: namespace Test { public partial class SearchField : UserControl { public Sea
我需要在转换器类中定义 DependencyProperty,因为我需要此数据来进行转换,并且此数据位于另一个对象中,而不是我绑定(bind)到的对象中。 我的转换器类如下: public class
我有这个代码: namespace Test { public partial class SearchField : UserControl { public Sea
我是一名优秀的程序员,十分优秀!