我有一种情况需要显示一个整数值,绑定到我的数据上下文中的属性,然后通过两次单独的转换:
我意识到我可以通过创建自己的转换器(实现IValueConverter)来完成这两个步骤.但是,我已经有一个单独的值转换器,只执行第一步,第二步由Int32Converter覆盖.
有没有办法在XAML中链接这两个现有的类而不必创建另一个聚合它们的类?
如果我需要澄清这些,请告诉我.:)
谢谢.
我想绑定到一个整数属性:
<RadioButton Content="None"
IsChecked="{Binding MyProperty,
Converter={StaticResource IntToBoolConverter},
ConverterParameter=0}" />
Run Code Online (Sandbox Code Playgroud)
我的转换器是:
[ValueConversion(typeof(int), typeof(bool))]
public class IntToBoolConverter : IValueConverter
{
public object Convert(object value, Type t, object parameter, CultureInfo culture)
{
return value.Equals(parameter);
}
public object ConvertBack(object value, Type t, object parameter, CultureInfo culture)
{
return value.Equals(false) ? DependencyProperty.UnsetValue : parameter;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我的转换器被调用时,参数是字符串.我需要它是一个整数.当然我可以解析字符串,但我必须这样做吗?
感谢konstantin的任何帮助
我想使用带有多参数函数的lambda,但是当我尝试调用该行时,Moq会在运行时抛出此异常mock.Object.Convert(value, null, null, null);
.
System.Reflection.TargetParameterCountException: Parameter count mismatch
代码是:
var mock = new Mock<IValueConverter>();
mock.Setup(conv => conv.Convert(It.IsAny<Object>(), It.IsAny<Type>(),
It.IsAny<Object>(), It.IsAny<CultureInfo>())).Returns((Int32 num) => num + 5);
var value = 5;
var expected = 10;
var actual = mock.Object.Convert(value, null, null, null);
Run Code Online (Sandbox Code Playgroud)
实施它的正确方法是什么?
有没有办法使用现有的WPF BooleanToVisibilityConverter转换器但是将False值转换为Hidden而不是默认的Collapsed,或者我应该自己编写?我正在进行一个项目,在这个项目中,做这样简单的事情会带来巨大的开销(共享的东西进入一个单独的解决方案,而重建/签入/合并过程是一个过度生长的变异庞然大物的过程),所以我更愿意,如果我可以将参数传递给现有参数,而不是跳过刚才提到的箍.
我正在将Image的Source属性绑定到字符串.此字符串可能为null,在这种情况下,我只是不想显示图像.但是,我在Debug输出中得到以下内容:
System.Windows.Data错误:23:无法将类型为"<null>"的"<null>"转换为使用默认转换为"en-AU"文化键入"System.Windows.Media.ImageSource"; 考虑使用Binding的Converter属性.NotSupportedException:'System.NotSupportedException:ImageSourceConverter无法转换(null).位于System.Windows.Media.ImageSourceConverter.ConvertFrom(ITypeDescriptorContext context,CultureInfo culture,Object value)的System.ComponentModel.TypeConverter.GetConvertFromException(Object value)at MS.Internal.Data.DefaultValueConverter.ConvertHelper(Object o,Type destinationType,DependencyObject) targetElement,CultureInfo culture,Boolean isForward)'
我更喜欢这个没有显示,因为它只是噪音 - 是否有任何方法可以抑制它?
在过去一年左右的时间里,我看到许多不同的价值转换器出于许多不同的目的,来自许多不同的作者.在我的脑海中突出的一件事是它们返回的"默认"值的广泛变化.例如;
public class MyConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
// OK, we test for some undesirable, unconvertable situation, typically null...
if (value == null)
{
// And here are a variety of 'defaults' that I have seen, these begin the most typical.
return null;
return DependencyProperty.UnsetValue;
return Binding.DoNothing;
}
//...... other code.. whatever...
}}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,是否有一种"标准"方式来表明输入值无法转换?
这个属性有什么意义?添加它之后,我仍然需要对值对象进行强制转换.
[ValueConversion(sourceType: typeof(double), targetType: typeof(string))]
public class SpeedConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var speed = (double)value;
Run Code Online (Sandbox Code Playgroud)
它仅用于代码可读性吗?因为当我在xaml中将绑定的路径更改为String时,Visual Studio不会发出有关错误类型的警告,并且仅在转换时抛出异常,因此即使在编译时错误捕获也不会产生异常.我也可以将强制转换为字符串,尽管它与此属性冲突,但不会抛出任何警告.
接口中的ConvertBack
方法有什么用IValueConverter
?
什么时候打电话?
或者什么是调用的顺序的Convert
和ConvertBack
方法.
我在这里提出问题是因为:我已经将一个codebehind属性绑定到TEXTBOX的TEXT属性并使用convertor
该属性,
然后第一个Convert
方法调用,当我改变TEXT
时TEXTBOX
没有发生但只要我关闭窗体ConvertBack
方法调用.
这是什么,没有任何规则来定义何时开火 ConvertBack
方法?
注意:您可能会发现这可能与本网站上的其他问题重复...但在我撰写问题时,我发现在建议列表中没有使用任何问题.
有谁知道如何在Windows Phone 7应用程序中使用带有多个参数的转换器?
提前致谢.
我有一个非常简单的IMultiValueConverter,它只是OR的两个值.在下面的示例中,我想使用同样简单的布尔型逆变器反转第一个值.
<MultiBinding Converter="{StaticResource multiBoolToVis}">
<Binding Path="ConditionA" Converter="{StaticResource boolInverter}"/>
<Binding Path="ConditionB"/>
</MultiBinding>
Run Code Online (Sandbox Code Playgroud)
和逆变器:
public class BoolInverterConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is bool)
{
return !((bool)value);
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
当我包含boolInverter时,MultiValueConverter中的第一个值变为"DependencyProperty.UnsetValue".当我不使用转换器时没有问题(当然,除了我不是针对的逻辑).
我错过了什么吗?单步执行调试器会显示InverseBoolConverter正在反转我传递的值,但该值不会被"发送"到MultiValueConverter.
ivalueconverter ×10
wpf ×9
c# ×6
.net ×3
xaml ×3
data-binding ×2
binding ×1
image ×1
moq ×1
silverlight ×1
unit-testing ×1