我有一个属性SortingName
,用作我SortMemberPath
中的其中一列的DataGrid
。但是,我希望每次单击标题时都可以更新此属性(即再次调用其setter)。
这里是属性:
[XmlIgnore]
public virtual string SortingName {
get { return m_sortingName; }
set
{
if (m_sortingName == null)
m_sortingName = value;
m_sortingName = m_sortingName.StartsWith("_") ? value : "_" + value;
}
}
这是用于DataGrid
的XAML(第一列是:
<DataGrid.Columns>
<DataGridTemplateColumn Header="Templates"
Width="200" SortMemberPath='SortingName'>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="{x:Type request:ModelDocument}">
<TextBlock TextAlignment="Left">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="{Binding PrettyName}"/>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
...remaining columns
我尝试为Binding
使用SortMemberPath
,并分配一个UpdateSourceTrigger=PropertyChanged
,但似乎没有任何作用。我也尝试过this方法,但是对ItemsSource
的定义方式有疑问。因此,我宁愿在点击时更新该属性。
答案 0 :(得分:0)
为解决这个问题,我只是在自定义类中创建了一个扩展了DataGrid的函数,并将其添加到其Sorting
事件处理程序中。
public DataGridEx()
{
Sorting += UpdateSorting;
}
UpdateSorting
函数在字符串的开头附加一个ASCII字符,具体取决于我希望该项保留的顺序。在此示例中,我希望文件夹类型的项保留在顶部,因此当列表升序时,我添加一个低字母字符(例如!
),反之亦然。这样,文件夹始终位于顶部。
在我看来,这不是最好的解决方案(老实说,它与问题本身并没有太大关系),但目前可以使用。如果有人有更好的答案,请随时发布!