1

ご挨拶、

WPF DataGridTemplateColumn には、ListView を使用する CellTemplate と、DataGrid を使用する CellEditingTemplate があります。

<DataTemplate x:Key="LimitsTemplate">
    <ListView ItemsSource="{Binding Limits}" IsEnabled="False">
        <ListView.ItemTemplate>
            ...
        </ListView.ItemTemplate>
    </ListView>
 </DataTemplate>
 <DataTemplate x:Key="LimitsEditingTemplate">
      <toolkit:DataGrid ItemsSource="{Binding Limits}" ...>
            ...
      </toolkit:DataGrid>
 </DataTemplate>

私が直面している問題は、ダブルクリックで列を強制的に編集モードにする方法ですか? これは他の列のデフォルトの動作であり、一般的に DataGrid の場合と考えています。F2 を押すと編集モードが開始されますが、マウスを使用したダブルクリックでは開始されません。

ListView.IsEnabled を False に設定すると、ダブルクリックは機能しますが、正しく表示されない無効なリスト ビューがあり、スタイル ハックは醜いクラッジのように感じます。

トリックを実行しなかったシングルクリック編集を試みたことに注意してください。

どんな助けでも感謝します、ありがとう!

4

2 に答える 2

1

もちろん、私がSOに尋ねるとすぐに、答えが具体化します:)シングルクリック編集トリックからFindVisualParentメソッドを使用し、それをリストビューに接続すると、すべて期待どおりに機能します。

<DataTemplate x:Key="LimitsTemplate">
    <ListView ItemsSource="{Binding Limits}" PreviewMouseDoubleClick="limitsListView_PreviewMouseDoubleClick">
    ...

そして背後にあるコードで:

static T FindVisualParent<T>(UIElement element) where T : UIElement
{
    UIElement parent = element;
    while (parent != null)
    {
        T correctlyTyped = parent as T;
        if (correctlyTyped != null)
        {
            return correctlyTyped;
        }

        parent = System.Windows.Media.VisualTreeHelper.GetParent(parent) as UIElement;
    }
    return null;
}

void limitsListView_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    DataGrid dataGrid = FindVisualParent<DataGrid>(sender as UIElement);
    if (dataGrid != null)
    {
        dataGrid.BeginEdit();
    }
}
于 2010-08-17T07:48:23.087 に答える
0

DataGridでも同様の問題が発生しました。プロジェクトで問題が発生した原因は次のとおりです。DataGridのItemsSourceには、IEnumerableを実装するカスタムリストが割り当てられています。

このリストを実装して、同じインデックスの異なる呼び出しに対して異なるオブジェクトを返すようにしました。たとえば、list [0]を初めて呼び出す場合、たとえば、もう一度list [を呼び出す場合は、「WPF」という名前のオブジェクトを返します。 0]値「WPF」を保持する完全に新しいオブジェクトを返します。

したがって、バインドしているコレクション(Limits)が、IEnumerableおよびIListインターフェイスを実装したカスタムコレクションである場合は、実装を確認してください。私の場合、それはインデックス演算子IndexOfとContainsでした。

私のブログ

于 2011-09-30T22:57:52.983 に答える