木木同学578 2024-01-08 23:29 采纳率: 25%
浏览 6
已结题

WPF Binding问题

我有一个WPF程序,用Prism+Handycontrol,Tools.QuickFunctionModule和Tools.ModuleBase是两个独立的Module

1、在项目Tools.QuickFunctionModule里,有如下FileManagementView及FileManagementViewModel。

xaml代码:

 xmlns:view="clr-namespace:Tools.ModuleBase.Views;assembly=Tools.ModuleBase"

 <StackPanel>
    <view:SelecteFilePathView />
    <view:SelecteExportFolderPathView />
</StackPanel>  

Viewmodel代码:


public DelegateCommand<string> SelectedFileCommand { get; set; }

private void OnSelectedFile(string obj)
{
    switch (obj)
    {
        case "SourceFilePath":
            string pathFile = FolderFileSelectHelper.SelectedFileOrFolder("File");
            FileManagement.SourceFilePath = pathFile;
            break;

        case "OutFilePath":
            string pathFolder = FolderFileSelectHelper.SelectedFileOrFolder("Folder");
            FileManagement.OutFilePath = pathFolder;
            break;
    }
}


2、在项目Tools.ModuleBase里,有SelecteExportFolderPathView和SelecteFilePathView。

SelecteExportFolderPathView的代码:

<hc:SearchBar Command="{Binding SelectedFileCommand}"
              CommandParameter="OutFilePath" />


SelecteFilePathView的代码:

<hc:SearchBar Command="{Binding SelectedFileCommand}"
              CommandParameter="SourceFilePath" />


以上可以看到hc:SearchBar的Command="{Binding SelectedFileCommand}"是一样的,CommandParameter传参不一样,但是运行程序后,只有SelecteFilePathView能触发SelectedFileCommand,SelecteExportFolderPathView无法触发。该怎么解决?

img

img

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-01-09 08:33
    关注

    【以下回答由 GPT 生成】

    这个问题的原因可能是在Tools.QuickFunctionModuleFileManagementViewModel中,通过SelectedFileCommand绑定到了hc:SearchBarCommand属性,但是没有正确为CommandParameter属性提供数据。默认情况下,CommandParameter绑定的是当前绑定上下文的数据对象。这就是为什么SelecteFilePathView可以正常工作,因为它在Tools.QuickFunctionModule的上下文中。

    要解决这个问题,我们可以通过两种方式为CommandParameter提供正确的数据:

    1. 使用RelativeSource绑定: 在SelecteExportFolderPathView的XAML代码中,使用RelativeSource绑定来获取到FileManagementViewModel的实例,并将其作为CommandParameter的值。代码如下:

    xml <hc:SearchBar Command="{Binding SelectedFileCommand}" CommandParameter="{Binding DataContext, RelativeSource={RelativeSource AncestorType={x:Type view:FileManagementView}}}" />

    这样,CommandParameter将绑定到FileManagementView的上下文中的FileManagementViewModel实例。

    1. 使用ElementName绑定: 另一种方法是在SelecteExportFolderPathView的XAML代码中,使用ElementName绑定来引用FileManagementView的名称,并将其作为CommandParameter的值。代码如下:

    xml <StackPanel> <view:SelecteFilePathView x:Name="filePathView" /> <view:SelecteExportFolderPathView CommandParameter="{Binding DataContext, ElementName=filePathView}" /> </StackPanel>

    这样,CommandParameter将绑定到filePathView元素的上下文中的FileManagementViewModel实例。

    通过使用上述其中一种方法,应该能够正确绑定CommandParameter并解决这个问题。如果还有其他问题,请随时追问。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月12日
  • 创建了问题 1月8日

悬赏问题

  • ¥15 在国外文献网站里点击view pdf 加载异常缓慢甚至加载不出来。
  • ¥50 python批量提取发票的信息
  • ¥15 mysql安装,初始化数据库失败
  • ¥15 虚幻五引擎内容如何上传至网盘?
  • ¥15 使用mmpose库时出现了问题
  • ¥15 IRI2016模型matlab运行报错
  • ¥50 bat怎么设置电脑后台自动点击网页指定词运行脚本,输入指定网页链接,指定点击词,指定间隔时间,指定网页出现的词,指定网页出现词出现后后点击锁定,放在后台运行不影响前台鼠标工作
  • ¥20 20CrMnMo的高温变形抗力
  • ¥15 RTX3.6 5565驱动中断报错
  • ¥50 带防重放token(Antireplay-Token)的网站怎么用Python发送请求