Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在绑定中从容器类调用方法_C#_Wpf - Fatal编程技术网

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;
}