【发布时间】:2016-01-25 09:21:33
【问题描述】:
我正在努力学习MultiBinding。
我尝试将两个值(一个 double 和一个 boolean)从 viewmodel 传递给转换器并返回一个 string 结果。
XAML
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource MyValueConverter}">
<Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=ScrollViewer}" Path="DataContext.SelectedCar.PowerValue" />
<Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=ScrollViewer}" Path="DataContext.SelectedCar.IsPowerAvailable" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
转换器
class MyValueConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (System.Convert.ToBoolean(values[1]))
{
return string.Format("{0:n1}", values[0]);
}
else
{
return "[not available]";
}
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
视图模型
public double PowerValue
public bool IsPowerAvailable
在转换器中我会得到一个异常Unable to cast object of type 'MS.Internal.NamedObject' to type 'System.IConvertible。
这是什么意思?我是否错误地实现了MultiBinding?
编辑:
ViewModel 看起来像这样
class CarViewModel : ViewModelBase
{
private car _selectedCar;
public car SelectedCar
{
get { return _selectedCar; }
set
{
_selectedCar = value;
}
}
模型如下所示:
class car
{
public double PowerValue { get; set; }
public bool IsPowerAvailable{ get; set; }
}
【问题讨论】:
-
您可能会在此类似主题中找到一些提示:stackoverflow.com/questions/18866308/…
-
你为什么使用 relativeSource ?你有不同的数据上下文吗?
-
不,我只有一个数据上下文。我尝试了很多替代方案,也没有RelativeSource,但它们也不起作用
-
这个文本块在哪里使用?只是在窗口/用户控件内还是在数据模板内?
-
TextBlock 是独立的 ScrollViewer 并且在 Grid 中。没有数据模板。
标签: c# wpf imultivalueconverter