如何在WPF Datagrid中动态更改字符串货币格式

eimct9ow  于 2023-08-07  发布在  其他
关注(0)|答案(3)|浏览(123)

我有WPF应用程序与DataGrid包含一些价格。我想动态改变货币和列格式也必须调整。
我发现的唯一方法就是通过这种方式设置格式:

<DataGridTextColumn Header="Price" Width="95" Binding="{Binding Path=Price, StringFormat=C, ConverterCulture='en-US'}" />

字符串
但这种绑定是静态的。当我试图将ConverterCulture绑定到代码中的值时,它会抛出绑定错误。

<DataGridTextColumn Header="Price" Width="95" Binding="{Binding Path=Price, StringFormat=C, ConverterCulture="{Binding Source=CurrencyCulture}" />


是否有任何方法可以动态更改Datagrid列格式的ConverterCulture?

ct3nt3jp

ct3nt3jp1#

是否有任何方法可以动态更改Datagrid列格式的ConverterCulture?
设置DataGridLanguage属性:

<DataGrid Language="fr-FR" ...>

字符串
这是可以绑定到的依赖项属性。

pw9qyyiw

pw9qyyiw2#

我没有测试它,所以我不能告诉如果它的工作肯定,但你可以尝试这样的东西与风格和datatrigger。在这个例子中,你需要一个dependecy属性“currency”,你设置为“USD”来触发更改,但是你可以根据需要调整触发器:

<DataGridTextColumn Header="Price" Width="95" Binding="{Binding Path=Price, StringFormat=C, ConverterCulture="{Binding Source=CurrencyCulture}">
    <DataGridTextColumn.CellStyle>
        <Style TargetType="DataGridCell">
            <Setter Property="Binding" Value="{Binding Path=Price, StringFormat=C, ConverterCulture="{Binding Source=CurrencyCulture}"
            <Style.Triggers>
                <DataTrigger Binding="Currency" Value="USD">
                    <Setter Property="Binding" Value="{Binding Path=Price, StringFormat=C, ConverterCulture='en-US'}"
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGridTextColumn.CellStyle>
<DataGridTextColumn/>

字符串
希望这能解决你的问题或引导你在一个方向,这样做的伎俩

bkhjykvo

bkhjykvo3#

最后我找到了解决办法。不太理想,但似乎有效。CurrentContext是我用来存储变量的静态类。SelectedCurrency.CurrencyCode是3字符货币代码,如USD或EUR。当我在组合框中更改货币时,列中的字符串格式也会随所需的货币符号而更改。
CultureConverter.cs

public class CultureConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            if (values[0] == null) return string.Empty;

            return String.Format(CurrentContext.CultureInfo, "{0:C}", values[0]);
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

字符串
Form.xaml

<Window.Resources>
        <providers:CultureConverter x:Key="CultureConverter" />
    </Window.Resources>

DataGrid Name="Datagrid" ItemsSource="{Binding Items, Mode=TwoWay}" AutoGenerateColumns="False">
  <DataGrid.Columns>
...
    <DataGridTemplateColumn>
      <DataGridTemplateColumn.CellTemplate>
         <DataTemplate>
           <TextBlock>
             <TextBlock.Text>
               <MultiBinding Converter="{StaticResource CultureConverter}">
                 <Binding Path="InitialCost" />
               </MultiBinding>
             </TextBlock.Text>
           </TextBlock>
         </DataTemplate>
       </DataGridTemplateColumn.CellTemplate>
   </DataGridTemplateColumn>
...
  </DataGrid.Columns>
</DataGrid>
private void CB_Currency_SelectionChanged(object sender, SelectionChangedEventArgs e)
{

    CurrentContext.CultureInfo = 
    CultureInfo.GetCultures(CultureTypes.SpecificCultures)
                          .Where(x => new RegionInfo(x.LCID)
                          .ISOCurrencySymbol == SelectedCurrency.CurrencyCode)
                          .First();
}

的数据

相关问题