Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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
如何基于多重绑定对WPF多重绑定DataGridTextColumn进行排序?_Wpf_Sorting_Wpfdatagrid_Multibinding_Datagridtextcolumn - Fatal编程技术网

如何基于多重绑定对WPF多重绑定DataGridTextColumn进行排序?

如何基于多重绑定对WPF多重绑定DataGridTextColumn进行排序?,wpf,sorting,wpfdatagrid,multibinding,datagridtextcolumn,Wpf,Sorting,Wpfdatagrid,Multibinding,Datagridtextcolumn,我想根据多重绑定值对DataGridTextColumn进行排序-文本列同时绑定了日期和时间,因此排序操作应该基于日期时间进行 XMAL源代码是 <DataGridTextColumn Header="Visit Date" CanUserSort="True" > <DataGridTextColumn.SortMemberPath> <MultiBinding StringFormat="{}{0} {1}">

我想根据多重绑定值对DataGridTextColumn进行排序-文本列同时绑定了日期和时间,因此排序操作应该基于日期时间进行

XMAL源代码是

<DataGridTextColumn Header="Visit Date" CanUserSort="True" >
    <DataGridTextColumn.SortMemberPath>
        <MultiBinding StringFormat="{}{0} {1}">
            <Binding Path="VisitDate"/>
            <Binding Path="VisitTime" />
        </MultiBinding>
    </DataGridTextColumn.SortMemberPath>
    <DataGridTextColumn.Binding>
        <MultiBinding StringFormat="{}{0} {1}">
            <Binding Path="VisitDate"/>
            <Binding Path="VisitTime" />
        </MultiBinding>
    </DataGridTextColumn.Binding>
</DataGridTextColumn>
public class Employee
{
    public string empName { get; set; }
    public string VisitDate { get; set; }
    public string VisitTime { get; set; }
}

public class EmployeeInfo
{
    public ObservableCollection<Employee> EmployeeList { get; set; }

    public EmployeeInfo()
    {
        EmployeeList = new ObservableCollection<Employee>();
        EmployeeList.Add(new Employee { empName = "John", VisitDate = "11/28/2015", VisitTime = "05:12 PM" });
        EmployeeList.Add(new Employee { empName = "Potter", VisitDate = "10/28/2015", VisitTime = "04:33 PM" });
        EmployeeList.Add(new Employee { empName = "James", VisitDate = "11/27/2015", VisitTime = "09:12 AM" });
    }
}

视图和视图模型C#源代码如下

<DataGridTextColumn Header="Visit Date" CanUserSort="True" >
    <DataGridTextColumn.SortMemberPath>
        <MultiBinding StringFormat="{}{0} {1}">
            <Binding Path="VisitDate"/>
            <Binding Path="VisitTime" />
        </MultiBinding>
    </DataGridTextColumn.SortMemberPath>
    <DataGridTextColumn.Binding>
        <MultiBinding StringFormat="{}{0} {1}">
            <Binding Path="VisitDate"/>
            <Binding Path="VisitTime" />
        </MultiBinding>
    </DataGridTextColumn.Binding>
</DataGridTextColumn>
public class Employee
{
    public string empName { get; set; }
    public string VisitDate { get; set; }
    public string VisitTime { get; set; }
}

public class EmployeeInfo
{
    public ObservableCollection<Employee> EmployeeList { get; set; }

    public EmployeeInfo()
    {
        EmployeeList = new ObservableCollection<Employee>();
        EmployeeList.Add(new Employee { empName = "John", VisitDate = "11/28/2015", VisitTime = "05:12 PM" });
        EmployeeList.Add(new Employee { empName = "Potter", VisitDate = "10/28/2015", VisitTime = "04:33 PM" });
        EmployeeList.Add(new Employee { empName = "James", VisitDate = "11/27/2015", VisitTime = "09:12 AM" });
    }
}
公共类员工
{
公共字符串empName{get;set;}
公共字符串VisitDate{get;set;}
公共字符串访问时间{get;set;}
}
公共类EmployeeInfo
{
公共ObservableCollection EmployeeList{get;set;}
公共雇员信息()
{
EmployeeList=新的ObservableCollection();
添加(新员工{empName=“John”,VisitDate=“11/28/2015”,VisitTime=“05:12 PM”});
添加(新员工{empName=“Potter”,VisitDate=“10/28/2015”,VisitTime=“04:33 PM”});
添加(新员工{empName=“James”,VisitDate=“11/27/2015”,VisitTime=“09:12 AM”});
}
}

我认为您应该创建一个自定义比较器并将其应用于datagrid。看一看,难道你不能提供一个viewmodel属性,它包含格式化的结果文本并绑定到它而不是视图中的多重绑定吗?请参考viewmodel.@B.Balamanigandan,那么,添加
public string VisitDateTime{get{return string.Format({0}{1}),VisitDate,VisitTime);}
到您的
员工
并绑定到该员工而不是多重绑定?这并不能回答您关于如何按多重绑定排序的问题,但它应该可以解决根本问题。@B.Balamanigandan您可能希望按实际日期和时间排序,而不是按字符串表示。如果是这种情况,我可能会根据我的建议写一个答案,但仍然是作为viewmodel解决方案,而不是绑定相关的解决方案。我认为您应该创建一个自定义比较器并将其应用于datagrid。看一看,难道你不能提供一个viewmodel属性,它包含格式化的结果文本并绑定到它而不是视图中的多重绑定吗?请参考viewmodel.@B.Balamanigandan,那么,添加
public string VisitDateTime{get{return string.Format({0}{1}),VisitDate,VisitTime);}
到您的
员工
并绑定到该员工而不是多重绑定?这并不能回答您关于如何按多重绑定排序的问题,但它应该可以解决根本问题。@B.Balamanigandan您可能希望按实际日期和时间排序,而不是按字符串表示。如果是这种情况,我可以根据我的建议写一个答案——但仍然是作为viewmodel解决方案,而不是绑定相关的解决方案。