Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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# 在wpf datagrid的字符串属性中强制进行日期排序_C#_Wpf_Datagrid - Fatal编程技术网

C# 在wpf datagrid的字符串属性中强制进行日期排序

C# 在wpf datagrid的字符串属性中强制进行日期排序,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一个datagrid,它将所有列绑定到字符串属性 我在运行时创建这些列,因此需要以编程方式进行绑定: var c = new DataGridTextColumn(); c.Header = myProperty; c.Binding = new Binding(myProperty); if (thisColumnsIsDate()) c.Binding.StringFormat = "{0:dd/MM/yyyy}"; myGrid.Columns.Add(c); 问题是网格对这

我有一个datagrid,它将所有列绑定到字符串属性

我在运行时创建这些列,因此需要以编程方式进行绑定:

var c = new DataGridTextColumn();
c.Header = myProperty;
c.Binding = new Binding(myProperty);
if (thisColumnsIsDate())
    c.Binding.StringFormat = "{0:dd/MM/yyyy}";
myGrid.Columns.Add(c);
问题是网格对这些日期列的排序方式类似于
string
,而不是
DateTime

这是网格定义:

<DataGrid
            Grid.Row="1"
            Margin="2"
            Name="myGrid"
            AutoGenerateColumns="False"
            IsEnabled="True"
            IsReadOnly="True"
            ItemsSource="{Binding Path=Rows}"
            SelectedItem="{Binding Path=SelectedRow}"
            HorizontalGridLinesBrush="Transparent" VerticalGridLinesBrush="Transparent" AlternatingRowBackground="WhiteSmoke"
            PreviewKeyDown="gridResult_OnKeyDown">


缺少什么?

这将更正日期列的排序:

c.SortMemberPath = myProperty;
但如果属性是字符串,则需要首先将其转换为日期时间:

var c = new DataGridTextColumn();
c.Header = myProperty;

if (thisColumnsIsDate())
{
    myDateTimeProperty = DateTime.Parse(myProperty);
    c.Binding = new Binding(myDateTimeProperty);
    c.Binding.StringFormat = "{0:dd/MM/yyyy}";
    c.SortMemberPath = myDateTimeProperty;
}
else
{
    c.Binding = new Binding(myProperty);
    c.Binding.StringFormat = "{0:dd/MM/yyyy}";
    c.SortMemberPath = myProperty;
}
myGrid.Columns.Add(c);

此外,您还可以实现自己的比较器:

它仍然像字符串一样排序,而不是日期值。@myProperty是字符串吗?是的,它是字符串。事实上,所有绑定属性都是字符串,所以我猜将其中一些属性更改为DateTime不是一个选项。您可以将其强制转换为DateTime并将其添加为新属性吗?这样你就可以毫无问题地绑定。