1

列が 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 プロパティ、両方とも機能します) に基づいて列を並べ替えるにはどうすればよいですか?

4

1 に答える 1