1

MultiValueConverter を使用したテキスト列を持つデータグリッドがあります。コンバーターは 2 つの値を取得しました。1 番目は現在の Item に依存し、2 番目は TextBlock に依存します。表示される値は私が欲しいものです。

<TextBox x:Name="phases"></TextBox>
<DataGrid AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeRows="False"
         ItemsSource="{Binding MySource}" RowDetailsVisibilityMode="Collapsed" RowHeaderWidth="0" 
          SelectionMode="Single">
    <DataGrid.Columns>
        <DataGridTextColumn Width="Auto" Header="Pos">
            <DataGridTextColumn.Binding>
                <MultiBinding Converter="{StaticResource MyMultiValueConverter}">
                    <Binding ElementName="phases" Path="Text" />
                    <Binding />
                </MultiBinding>
            </DataGridTextColumn.Binding>
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid >

列の値の表示は、私が望むものです。問題は、この列でソートできないことです。私はそのようなものを追加しようとします:

<DataGridTextColumn.SortMemberPath>
    <MultiBinding Converter="{StaticResource MyMultiValueConverter}">
        <Binding ElementName="phases" Path="Text" />
        <Binding />
    </MultiBinding>
</DataGridTextColumn.SortMemberPath>

しかし、「ターゲット要素の管理 FrameworkElement または FrameworkContentElement が見つかりません」というメッセージが表示されます。エラー。私は次のように変更します。

<DataGridTextColumn.SortMemberPath>
    <MultiBinding Converter="{StaticResource MyMultiValueConverter}">
        <Binding Path="Text" Source="{x:Reference phases}" />
        <Binding Path="" />
    </MultiBinding>
</DataGridTextColumn.SortMemberPath>

次に、最初の行は問題ありませんが、2 行目では currentItem を取得できません。

私はSortEventを使用しようとしましたが、ロジックなしでSortDescriptionしか追加できません(コンバーターに持っています)。

multiValueConverter を使用するときに列を並べ替える方法はありますか?

4

1 に答える 1

2

これはここと同じ質問だと思います: MultiBinding の DataGridColumn SortMemberPath

SortMemberPathは、個々の計算された行の値ではなく、プロパティの名前 (「TotalDollars」など) を想定しています。ヘッダーのように考えてください。列全体に対して一度設定します。コンバーターは、SortMemberPath がバインド パス文字列を必要とする 15 のような数値を返します。

頭に浮かぶ2つのオプション:

  1. バッキング オブジェクト (「AveragePrice」など) に計算されたプロパティを提供し、それにバインドします。コンバーターまたはソート メンバー パスは必要ありません。

    public double AveragePrice
    {
        get { return TotalDollars / NumberToDivideBy; }
    }
    
  2. この質問のようにOnSortingイベント ハンドラーを指定します。

それが役に立てば幸い。:)

于 2013-03-22T10:45:17.317 に答える