列が 1 つしかない DataGrid があります (この例のために)。この列は DataGridTemplateColumn です。
<DataGrid x:Name="grdMainGrid">
<DataGridTemplateColumn Header="Room" CanUserSort="True" SortMemberPath="DisplayText" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Path=AllRooms, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" Height="20" SelectedValuePath="Code" SelectedValue="{Binding Path=RoomCode, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="DisplayText" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid>
DataGrid の ItemsSource はリストに設定されます。
public class InsertableRecord
{
public int RoomCode { get; set; }
}
DataGridTemplateColumn の ComboBox の ItemsSource は、ウィンドウのプロパティにバインドされています。
public List<Room> AllRooms
{
get;
private set;
}
クラス「ルーム」の定義は次のとおりです。
public partial class Room
{
public string ID { get; set; }
public string Description { get; set; }
public string DisplayText
{
get
{
return this.ID + " (" + this.Description + ")";
}
}
}
SortMemberPath を DisplayText に設定していることに注意してください。これは、「InsertableRecord」ではなく「Room」のプロパティです。したがって、明らかに、この列を並べ替えようとすると、プロパティ「DisplayText」がオブジェクト「InsertableRecord」に存在しないというバインディング エラーが発生します。
ComboBox の現在の Text (または「Room」オブジェクトの DisplayText プロパティ、両方とも機能します) に基づいて列を並べ替えるにはどうすればよいですか?