C# 在绑定中从容器类调用方法
我确实有-C# 在绑定中从容器类调用方法,c#,wpf,C#,Wpf,我确实有- <UserControl ...> <Grid> <TreeView Name="nTree"> <TreeView.ItemTemplate> <HierarchicalDataTemplate DataType="NodeType" ItemsSource="{Binding Children}"> <StackPanel Orient
<UserControl ...>
<Grid>
<TreeView Name="nTree">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="NodeType" ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<Image x:Name="icon" />
<TextBlock Text="{Binding Name}" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
</UserControl>
这感觉应该是可能的,但我正在努力解决它。非常感谢您的帮助。不幸的是,您无法绑定到方法,您需要将该方法转换为属性 您可以通过几种方式来实现这一点 最简单的方法是:(虽然这应该在你的VM上,而不是你的V上) 或者您可以使用值转换器:(最适合您描述的内容) 第三种选择是使用: 然后绑定到命令
CommandBinding OpenCmdBinding = new CommandBinding(
ApplicationCommands.Open,
OpenCmdExecuted,
OpenCmdCanExecute);
this.CommandBindings.Add(OpenCmdBinding);
void OpenCmdExecuted(object target, ExecutedRoutedEventArgs e)
{
String command, targetobj;
command = ((RoutedCommand)e.Command).Name;
targetobj = ((FrameworkElement)target).Name;
MessageBox.Show("The " + command + " command has been invoked on target object " + targetobj);
}
void OpenCmdCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}
谢谢-我已经设法让它与一个值转换器一起工作。这并不理想,但它能以一种不那么糟糕的方式完成工作。
public ImageSource Icon
{
...
}
public class ImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
GetImageLogic
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException("One way only");
}
}
CommandBinding OpenCmdBinding = new CommandBinding(
ApplicationCommands.Open,
OpenCmdExecuted,
OpenCmdCanExecute);
this.CommandBindings.Add(OpenCmdBinding);
void OpenCmdExecuted(object target, ExecutedRoutedEventArgs e)
{
String command, targetobj;
command = ((RoutedCommand)e.Command).Name;
targetobj = ((FrameworkElement)target).Name;
MessageBox.Show("The " + command + " command has been invoked on target object " + targetobj);
}
void OpenCmdCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}