1

この非常に単純な例を作成しました。これは、TreeView と Button を持つ Window です。ボタンをクリックすると、選択したアイテムが表示されますが、機能していません。選択を変更しても CurrentItem プロパティは更新されません。

C#:

using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Data;

namespace TreeViewSort
{
public partial class Window1
{
    private ObservableCollection<string> _items;
    public ListCollectionView SortedItems { get; private set; }

    public Window1()
    {
        InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        _items =new ObservableCollection<string>();
        _items.Add("ZZ");
        _items.Add("AA");
        _items.Add("CA");
        _items.Add("DA");
        _items.Add("EA");

        this.SortedItems = new ListCollectionView(_items);
        this.DataContext = this;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show(this.SortedItems.CurrentItem.ToString());
    }
}
}

XAML:

<Window x:Class="TreeViewSort.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">
    <DockPanel>
        <TreeView DockPanel.Dock="Top" Name="treeView1" ItemsSource="{Binding SortedItems, Mode=TwoWay}" MinHeight="200" />
        <Button DockPanel.Dock="Bottom" Click="Button_Click">
            Test
        </Button>
    </DockPanel>
</Window>

MSDNのドキュメントによると

ターゲットが ItemsControl の場合、現在のアイテムは選択されたアイテムと同期されます

なぜこれが機能しないのですか?

前もって感謝します。

4

3 に答える 3

1

これがItemControlで機能するとドキュメントに記載されている場合でも、私が読んだ(そして見た)ものは、セレクターでのみ機能するということです...

于 2011-08-25T11:34:48.887 に答える
0

私はこれをしなければなりませんでしたが、それはきれいではありませんでした。ハイブリッド ツリー ビューとデータ グリッドがあります。次/前のアイテムに移動したり、アイテムを上下に移動したりできるようにするには、次のことを行う必要がありました。

  1. モデルに IsSelected プロパティを追加します (ハック - 私は知っています)
  2. 各モデルにはソート順プロパティがありました
  3. ツリーで項目が選択された場合 - linq クエリを使用して、選択された他の項目を見つけ、選択されていないものとしてマークします
  4. 選択したアイテムを IsSelected としてマークする
  5. 次に、カスタム ロジック (カスタムとは、150 行以上のコード行を意味します) を使用して、次の項目を配置する場所を決定します。ただし、このロジックは、ツリーと 2 つのレベル (親/子) で折りたたまれたアイテムを考慮していました。

IIRC 私がこれをしなければならなかった理由は、必要な値がビジュアル ツリー上にあったためでしたが、ロジック ツリーで作業していました。

于 2011-08-25T17:15:44.787 に答える
0

ListCollectionView の CurrentItem についてはよくわかりません。以下でこれを試してください。 Window1 クラスにプロパティを作成します -> public string SelectedItem { get; 設定; XAML で、ツリー ビュー コントロールの SelectedItem プロパティを SelectedItem プロパティにバインドします。

動作するはずです。

SelectedItem について -> http://msdn.microsoft.com/en-us/library/system.windows.controls.treeview.selecteditem.aspx

よろしくパヴェル・ヤンコフスキー

于 2011-08-25T09:54:59.743 に答える