Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将值和货币绑定到DataGridTextColumn_C#_Wpf_Xaml_Binding - Fatal编程技术网

C# 将值和货币绑定到DataGridTextColumn

C# 将值和货币绑定到DataGridTextColumn,c#,wpf,xaml,binding,C#,Wpf,Xaml,Binding,我想为文本列绑定货币,如果我像de一样键入值,它将起作用,我可以看到欧元。但如果我尝试绑定它,它将发送一个错误 Ofc我可以将货币绑定到整个视图,但我始终有两种不同的货币要显示 有一些代码不起作用: Binding="{Binding Income,StringFormat=C,ConverterCulture={Binding CultureFormat}}" /> 如果我喜欢这个,它工作正常: <DataGridTextColumn Header="Saldo" Binding

我想为文本列绑定货币,如果我像de一样键入值,它将起作用,我可以看到欧元。但如果我尝试绑定它,它将发送一个错误

Ofc我可以将货币绑定到整个视图,但我始终有两种不同的货币要显示

有一些代码不起作用:

Binding="{Binding Income,StringFormat=C,ConverterCulture={Binding CultureFormat}}" />
如果我喜欢这个,它工作正常:

<DataGridTextColumn Header="Saldo" Binding="{Binding Balance,StringFormat=C,ConverterCulture=de}" />
我发现这是一种使用多重绑定的解决方案,但我不知道如何在本例中使用。

绑定不是依赖对象,其属性也不是依赖对象。要将绑定应用于binding.ConverterCulture,源应该是一个依赖属性,我想CultureFormat不是

如果需要变量区域性信息,可以在ViewModel中使用特定属性格式化数据,如

public string BalanceString
{
    get { return String.Format(CultureFormat, "C", Balance); }
}
然后使用此新属性进行绑定:

<DataGridTextColumn Header="Saldo" Binding="{Binding BalanceString, Mode=OneWay}" />

以下是如何使用多重绑定和转换器实现此目的:

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:


该示例假定CultureFormat属性返回一个字符串。如果它返回一个CultureInfo,您可以将值[1]强制转换为这种类型,而不是字符串。

现在我正在做类似的事情来解决这个问题。但我想以某种方式对它进行多重绑定,因为在这个数据网格中,我有5个字段,有2种不同的货币。以及其他两个不同型号的数据网格。我只是想找到更好的解决办法,很好。但我仍然看不到如何在xaml中绑定ViewModel中的值?因为当我像Path=MyValueFromViewModel一样绑定时,它会显示任何东西嘿,你的解决方案确实有效,但我只是必须将货币字段更改为,正如我在这个问题中发现的:
<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>