我想绑定文本列的货币,如果我输入像“de”这样的值,它正在工作,我可以看到欧元。但是如果我试图绑定它就会发送错误。
Ofc我可以将货币绑定到整个View,但我总是要显示2种不同的货币。
有些代码无效:
Binding="{Binding Income,StringFormat=C,ConverterCulture={Binding CultureFormat}}" />
如果我喜欢这样,它就能正常工作:
<DataGridTextColumn Header="Saldo" Binding="{Binding Balance,StringFormat=C,ConverterCulture=de}" />
我发现这是使用多重绑定的一些解决方案,但我不知道在这个例子中是怎么做的。
答案 0 :(得分:1)
以下是使用多重绑定和转换器的方法:
public class CultureConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if(values[0] != DependencyProperty.UnsetValue && values[1] != DependencyProperty.UnsetValue)
{
decimal balance = System.Convert.ToDecimal(values[0]);
string c = values[1] as string;
return balance.ToString("C", CultureInfo.GetCultureInfo(c));
}
return Binding.DoNothing;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
<强> XAML:强>
<DataGrid ...>
<DataGrid.Resources>
<local:CultureConverter x:Key="conv" />
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Header="Saldo">
<DataGridTextColumn.Binding>
<MultiBinding Converter="{StaticResource conv}">
<Binding Path="Income" />
<Binding Path="CultureFormat" />
</MultiBinding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
...
</DataGrid.Columns>
</DataGrid>
该示例假定CultureFormat
属性返回一个字符串。如果它返回CultureInfo
,您只需将values[1]
投射到此类型而不是string
。
答案 1 :(得分:0)
Binding
不是依赖对象,其属性不是依赖对象。要将绑定应用于Binding.ConverterCulture
,源应该是依赖属性,我想CultureFormat
不是。
如果您需要变量文化信息,可以使用特定属性在ViewModel中格式化数据,例如
public string BalanceString
{
get { return String.Format(CultureFormat, "C", Balance); }
}
然后使用这个新属性进行绑定:
<DataGridTextColumn Header="Saldo" Binding="{Binding BalanceString, Mode=OneWay}" />