C# 使用方法的WPF树绑定问题
我已将WPF树视图绑定到可观察的集合。当连接节点在UI中展开时,我希望调用Connection.GetDatabases(),它返回数据库的集合 我正在使用HierarchycalDataTemplate:C# 使用方法的WPF树绑定问题,c#,.net,wpf,data-binding,xaml,C#,.net,Wpf,Data Binding,Xaml,我已将WPF树视图绑定到可观察的集合。当连接节点在UI中展开时,我希望调用Connection.GetDatabases(),它返回数据库的集合 我正在使用HierarchycalDataTemplate: <HierarchicalDataTemplate DataType="{x:Type dbcore:Connection}" ItemsSource="<WHAT GOES HERE?>"> <StackPanel Orientatio
<HierarchicalDataTemplate DataType="{x:Type dbcore:Connection}" ItemsSource="<WHAT GOES HERE?>">
<StackPanel Orientation="Horizontal">
<Image Source="{StaticResource DataServerIcon}" Margin="5,2" />
<TextBlock Text="{Binding Converter={StaticResource connToStringConverter}}" />
</StackPanel>
</HierarchicalDataTemplate>
但是因为我想使用方法而不是属性,所以我不确定在ItemsSource属性中使用什么。您可以创建一个函数,它接受对象并调用该方法
但是,向调用该方法的原始对象添加proeprity会简单得多,而且可能会快一点。您可能需要添加
[过时(“请调用MyMethod()”,true)]
以防止在代码中使用属性表单。(这不会干扰数据绑定)为什么不简单地使用一个属性,它将通过您想要的任何方法/服务返回数据?您不能以本机方式绑定到方法;因此,要么在属性getter中访问您的方法,要么使用IValueConverter
和参数,该参数可能包含要调用的方法
public ObservableColection<Database> Databases
{
get
{
return GetDatabases();
}
}
公共可观察选择数据库
{
得到
{
返回GetDatabases();
}
}
由于要在展开项时获取值,因此在设计时无法在XAML中进行。您可以在项目在代码隐藏中展开时执行此操作:
<TreeView TreeViewItem.Expanded="OnExpanded" ... >
private void OnExpanded(object sender, RoutedEventArgs e)
{
TreeViewItem tvi = e.OriginalSource as TreeViewItem;
if (tvi != null)
{
tvi.Focus(); // to ensure the expanded item is selected
tvi.ItemsSource = ((Connection)myTreeView.SelectedItem).GetDatabases();
}
}
私有void OneExpanded(对象发送方,RoutedEventArgs e)
{
TreeViewItem tvi=e.原始来源为TreeViewItem;
如果(tvi!=null)
{
tvi.Focus();//确保已选择展开项
tvi.ItemsSource=((连接)myTreeView.SelectedItem.GetDatabases();
}
}
为什么不使用一个属性来调用您想要返回数据的任何服务/方法?@Aaron-因为我不想。重复@Bryan-谢谢。我事先找过,但没找到。看起来很有希望。我不能向我没有创建的类添加属性@Ronnie将数据包装在自己的类中;ala是一个ViewModel…事实上,您有一个在洋葱上还没有创建的类,这本身就是一个危险信号。应该避免绑定到调用可能长时间运行的方法的属性。