假设我有以下 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
{
公共类视图模型
{
公共视图模型()
{
Root = new ObservableCollection() { "Item 1", "Item 2", "Item 3", };
}
公共 ObservableCollection 根 { 获取;私人套装;}
}
公共类 LoadChildrenValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfoculture)
{
return new ObservableCollection() { "Item 1", "Item 2", "Item 3", };
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfoculture)
{
抛出新的 NotImplementedException();
}
}
}
这按预期工作,但感觉错误的是,我需要两个单独的类来获取视图所需的数据(想象一下 ViewModel 和 LoadChildrenValueConverter 从 Web 服务中提取数据而不是返回硬编码数据)。这里有更好的解决方案吗?我在想也许是这样的......
使用系统;
使用 System.Collections.ObjectModel;
使用 System.Windows.Data;
命名空间 SilverlightViewModelSpike
{
公共类视图模型
{
公共视图模型()
{
Root = new ObservableCollection() { "Item 1", "Item 2", "Item 3", };
ValueConverter = new LoadChildrenValueConverter();
}
公共 ObservableCollection 根 { 获取;私人套装;}
公共 LoadChildrenValueConverter ValueConverter { get; 私人套装;}
}
公共类 LoadChildrenValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfoculture)
{
return new ObservableCollection() { "Item 1", "Item 2", "Item 3", };
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfoculture)
{
抛出新的 NotImplementedException();
}
}
}
...但是我无法让这条线工作...
<control:HierarchicalDataTemplate ItemsSource="{???}">
...即使这似乎也不是一个很好的解决方案。有没有人对此有一个很好的干净解决方案?