gpt4 book ai didi

c# - 根据其他列中的值更改 DataGridTextColumn 单元格上的字符串格式,并保持值可排序

转载 作者:太空宇宙 更新时间:2023-11-03 13:13:56 26 4
gpt4 key购买 nike

我想做的是根据另一列中的相应行设置一列中单元格的小数位数。但是我仍然需要第一列在转换后允许排序。

我尝试的第一件事是使用 IValueConverter。这是 XAML:

<Window.Resources>
<src:DataValueConverter x:Key="dataValueConverter" />
</Window.Resources>

<Grid>
<DataGrid x:Name="dataGrid" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}"></DataGridTextColumn>
<DataGridTextColumn Header="Humidity" Binding="{Binding Humidity, Converter={StaticResource dataValueConverter}"></DataGridTextColumn>
<DataGridTextColumn Header="Version" Binding="{Binding Version}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>

这里我想要基于版本中值的湿度值的小数位数。所以我尝试将版本传递给 ConverterParameter,然后很快发现它不接受绑定(bind)。

我尝试按照 Binding ConverterParameter 的建议将 MultiBinding 与 MultiValueConverter 结合使用。它确实显示了不同的小数位,但是无法再对该列进行排序。还尝试了这个可绑定(bind)的 ConverterParameter http://www.codeproject.com/Articles/456589/Bindable-Converter-Parameter ,给出了相同的结果。

那么是否可以通过填充ConverterParameter来获得想要的结果呢?

<DataGridTextColumn Header="Humidity" Binding="{Binding Humidity, Converter={StaticResource dataValueConverter}, ConverterParameter=???}">

最佳答案

解决方案是坚持使用 MultiBinding,但还要为湿度列设置 SortMemberPath。这告诉该列要排序的值。因此生成的 XAML 如下所示:

 <DataGrid x:Name="dataGrid"  AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}"></DataGridTextColumn>
<DataGridTextColumn Header="Humidity" SortMemberPath="Humidity">
<DataGridTextColumn.Binding>
<MultiBinding Converter="{StaticResource multiDataValueConverter}">
<Binding Path="Humidity" />
<Binding Path="Version" />
</MultiBinding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>

然后,后面的代码是一个 IMultiConverter,类似于:

public class MultiDataValueConverter: IMultiValueConverter
{

public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int version = (int)(values[1]);

string format = "0.0000";
if(version==2)
{
format = "0.000000";
}

double val = (double)(values[0]);
return val.ToString(format);
}

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

关于c# - 根据其他列中的值更改 DataGridTextColumn 单元格上的字符串格式,并保持值可排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27300755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com