0

TreeViewを使用しItemTemplate、プロパティを持つビュー モデルにバインドされているを作成しようとしていIsSelectedます。

なぜこれが機能しないのか正確にはわからないので、質問があいまいに思われる場合はお詫び申し上げます。

また、アプリにはもっと多くの があるため、コードを問題だと思うものに減らしましたXAML

DataTemplate を定義する方法は次のとおりです。

    <DataTemplate x:Key="ElementDataTemplate">
        <Label Content="{Binding Path=DisplayText}"></Label>
    </DataTemplate>

使用方法は次のとおりです。

     <TreeView ItemsSource="{Binding Elements}" 
               ItemTemplate="{DynamicResource ElementDataTemplate}">
               <TreeView.Resources>
                   <Style TargetType="ListBoxItem">
                      <Setter Property="IsSelected"
                              Value="{Binding Path=IsSelected, Mode=TwoWay}" />
                      </Style>
                </TreeView.Resources>
      </TreeView>

私の ViewModel には DisplayText プロパティと IsSelected プロパティがあります。

データ コンテキストの Elements プロパティと同じ数の項目が表示され、Label の Coutent が DisplayText に適切に設定されているため、ViewModel に正しくバインドされていることがわかります。アプリを実行すると、ゲッターと視覚的に。

ただし、IsSelectedViewModel のプロパティの getter が呼び出されることはありません (ブレークポイントにヒットすることはありません)。

アプリケーションを実行すると、マウスでアイテムを選択でき、選択が視覚的に反映されるため、TreeView アイテム自体が選択され、ViewModel の IsSelected プロパティにバインドされていないことを指摘しておく必要があります。どんな助けでも大歓迎です!

4

1 に答える 1

0

ああ、私はばかだ !私はそれが何であるかを理解しようと永遠に費やし、数時間後にここに来て、ついにそれを理解しました:

  <TreeView.ItemContainerStyle>
      <Style TargetType="TreeViewItem">
          <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
      </Style>
  </TreeView.ItemContainerStyle>

「TreeViewItem」の代わりに「ListBoxItem」を使用していました。コピー/貼り付けは私のベストを尽くしました。

于 2013-07-28T18:47:59.343 に答える