次のxamlがあるとしましょう...
<UserControl.Resources>
<local:ViewModel x:Name="viewModel" />
<local:LoadChildrenValueConverter x:Name="valueConverter" />
</UserControl.Resources>
<UserControl.DataContext>
<Binding Source="{StaticResource viewModel}" />
</UserControl.DataContext>
<Grid x:Name="LayoutRoot" Background="White">
<control:TreeView ItemsSource="{Binding Root}">
<control:TreeView.ItemTemplate>
<control:HierarchicalDataTemplate ItemsSource="{Binding Converter={StaticResource valueConverter}}">
<TextBlock Text="{Binding}" />
</control:HierarchicalDataTemplate>
</control:TreeView.ItemTemplate>
</control:TreeView>
</Grid>
...そしてそれに付随する次のコード...
システムを使用する;
System.Collections.ObjectModel の使用;
System.Windows.Data を使用します。
名前空間 SilverlightViewModelSpike
{
パブリック クラス ViewModel
{
public ViewModel()
{
Root = new ObservableCollection() { "アイテム 1", "アイテム 2", "アイテム 3", };
}
public ObservableCollection ルート { get; プライベートセット; }
}
public class LoadChildrenValueConverter : IValueConverter
{
public object Convert(オブジェクト値、タイプ targetType、オブジェクト パラメータ、System.Globalization.CultureInfo カルチャ)
{
return new ObservableCollection() { "アイテム 1", "アイテム 2", "アイテム 3", };
}
public object ConvertBack (オブジェクト値、Type targetType、オブジェクト パラメータ、System.Globalization.CultureInfo カルチャ)
{
新しい NotImplementedException() をスローします。
}
}
}
これは期待どおりに機能しますが、ビューに必要なデータを取得するために必要な 2 つの別個のクラスがあるのは違和感があります (ViewModel と LoadChildrenValueConverter が、ハード コーディングされたデータを返すのではなく、Web サービスからデータを取得したと想像してください)。ここでより良い解決策はありますか?こんなこともあるのかな…と思っていました。
システムを使用する;
System.Collections.ObjectModel の使用;
System.Windows.Data を使用します。
名前空間 SilverlightViewModelSpike
{
パブリック クラス ViewModel
{
public ViewModel()
{
Root = new ObservableCollection() { "アイテム 1", "アイテム 2", "アイテム 3", };
ValueConverter = new LoadChildrenValueConverter();
}
public ObservableCollection ルート { get; プライベートセット; }
public LoadChildrenValueConverter ValueConverter { get; プライベートセット; }
}
public class LoadChildrenValueConverter : IValueConverter
{
public object Convert(オブジェクト値、タイプ targetType、オブジェクト パラメータ、System.Globalization.CultureInfo カルチャ)
{
return new ObservableCollection() { "アイテム 1", "アイテム 2", "アイテム 3", };
}
public object ConvertBack (オブジェクト値、Type targetType、オブジェクト パラメータ、System.Globalization.CultureInfo カルチャ)
{
新しい NotImplementedException() をスローします。
}
}
}
...しかし、この行を機能させることができません...
<control:HierarchicalDataTemplate ItemsSource="{???}">
...そして、それでも素晴らしい解決策とは思えません。誰もこれのためのすてきなきれいな解決策を持っていますか?