そのため、以下のタイプにバインドされた Silverlight ツリービュー コントロールがあり、ページの を、オブジェクトのリストでDataContext
あるプロパティを持つ ViewModel のインスタンスに設定します。Divisions
RmDivision
public class RmDivision
{
public RmDivision()
{
SubDivisions = new ObservableCollection<RmDivision>();
}
public string Type { get; set; }
public string Name { get; set; }
public IList<RmDivision> SubDivisions { get; set; }
}
そして、次のようにバインドされます。
<sdk:TreeView HorizontalAlignment="Stretch" Name="treeBranches"
ItemsSource="{ Binding Divisions }" VerticalAlignment="Stretch" SelectedValuePath="Division" Grid.Row="0" SelectedItemChanged="treeBranches_SelectedItemChanged">
<sdk:TreeView.ItemTemplate>
<sdk:HierarchicalDataTemplate ItemsSource="{Binding SubDivisions}">
<TextBlock Text="{Binding Name}" ToolTipService.ToolTip="{Binding Type}" />
</sdk:HierarchicalDataTemplate>
</sdk:TreeView.ItemTemplate>
</sdk:TreeView>
これで、treeeview アイテムをクリックするたびに、次の出力ウィンドウにのみ例外が発生しなくなりました。
System.Windows.Data エラー: BindingExpression パス エラー: 'xxx.Base.RmDivision' 'xxx.Base.RmDivision' で 'Division' プロパティが見つかりません (HashCode=35753827)。BindingExpression: Path='Division' DataItem='xxx.Base.RmDivision' (HashCode=35753827); ターゲット要素は 'System.Windows.Controls.ContentControl' (Name='') です。ターゲット プロパティは 'Content' (タイプ 'System.Object') です。
私はここでちょっと初心者で、何が起こっているのか本当にわかりません。それがツリービューであることを知る唯一の方法は、それがDivision
プロパティで何かをしなければならない唯一のコントロールだからSelectedValuePath
です。 RmDivision のインスタンスになり、現在は次のように機能します。
よろしく