让我们假设我有以下XAML ...Silverlight的数据绑定 - 绑定ValueConverter一个属性上的视图模型
<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>
...和下面的代码去与它...
using System; using System.Collections.ObjectModel; using System.Windows.Data; namespace SilverlightViewModelSpike { public class ViewModel { public ViewModel() { Root = new ObservableCollection() { "Item 1", "Item 2", "Item 3", }; } public ObservableCollection Root { get; private set; } } public class LoadChildrenValueConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return new ObservableCollection() { "Item 1", "Item 2", "Item 3", }; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } } }
这符合预期,但它感觉不对,我有两个单独的类这是为了获取我的视图所需的数据所需的(假设ViewModel和LoadChildrenValueConverter从Web服务中提取数据而不是返回硬编码数据)。这里有更好的解决方案吗?我想也许这样的事情...
using System; using System.Collections.ObjectModel; using System.Windows.Data; namespace SilverlightViewModelSpike { public class ViewModel { public ViewModel() { Root = new ObservableCollection() { "Item 1", "Item 2", "Item 3", }; ValueConverter = new LoadChildrenValueConverter(); } public ObservableCollection Root { get; private set; } public LoadChildrenValueConverter ValueConverter { get; private set; } } public class LoadChildrenValueConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return new ObservableCollection() { "Item 1", "Item 2", "Item 3", }; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } } }
...但我不能让这条线的工作...
<control:HierarchicalDataTemplate ItemsSource="{???}"
>
...甚至认为似乎并不是一个很好的解决方案。有没有人有一个很好的干净的解决方案呢?
这就是我要做的。不过,我不认为Silverlight允许在绑定中使用x:Static。这不正确吗? – herbrandson 2008-12-16 15:13:01