如何将视图元素作为命令参数传递给另一个视图?

时间:2019-08-02 10:56:40

标签: c# wpf xaml command

我在xaml中有一个窗口:

private void processImg(BufferedImage ipimage){
    Tesseract it = Tesseract();
    it.setDatapath(PropertiesService.getProperty(PropertiesService.PROPERTIES_COMPONENTS, "tesseractServerPath") + "\\" + "tessdata");
    String str = it.doOCR(ipimage);
}

工具栏是一个从usercontrol继承的类。在toolbar.xaml中,我有一个带有命令的按钮。

<view:ToolBar DataContext="{Binding}"/>

<Grid>
    <ListView>
        <ListView.View>
           <GridView>
               <GridViewColumn>
               ....//all the columns
           </GridView>
        </ListView.View>
    </ListView>
</Grid>

每次单击该按钮时,我都希望将列表视图的列标题传递给命令。但由于它们完全分开,我无法解决如何连接工具栏和列表视图的问题。有任何想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

首先,您将在ToolBar控件中需要一个新的DependencyProperty。您可以在此处阅读有关DependencyProperties的信息:

https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/dependency-properties-overview

在您的情况下,此DependencyProperty将是将成为列列表的属性。由于它是DependencyProperty,因此您可以在Xaml中将值绑定到它,并从ToolBar控件中检索这些列。

现在,关于如何将列列表绑定到DependencyProperty,您有两个选择。第一个是将其直接绑定到您的ListView。看起来像这样:

<view:ToolBar YourDependencyProperty={Binding TheListOfColumns, ElementName=MyGridView}"/>

<Grid>
    <ListView>
        <ListView.View>
           <GridView x:Name="MyGridView">
               <GridViewColumn>
               ....//all the columns
           </GridView>
        </ListView.View>
    </ListView>
</Grid>

另一个选项就像BionicCode在他对问题的评论中描述的那样,方法是将列保留在ViewModel中并绑定到ViewModel属性。但是为此,您将不得不在ViewModel中而不是Xaml中创建列。绑定看起来像这样:

<view:ToolBar YourDependencyProperty={Binding ListOfColumnsPropertyFromTheViewModel}"/>

希望有帮助!