【问题标题】:binding an ICommand to a custom eventhandler将 ICommand 绑定到自定义事件处理程序
【发布时间】:2011-08-04 10:13:44
【问题描述】:

我正在尝试创建一个数据分页器用户控件。此用户控件在其代码中声明了一个事件:

public event EventHandler OnPageIndexPagerChanged;

我在主用户​​控件中使用此控件,并将我的事件绑定到后面代码中的另一个事件,如下所示:

xaml:

OnPageIndexPagerChanged="SuperDataPager_OnPageIndexPagerChanged"

c#(代码隐藏):

private void SuperDataPager_OnPageIndexPagerChanged(object sender, EventArgs e)
        {
            var viewModel = DataContext as ViewSchedeConsuntiviViewModel;

            if (viewModel != null)
            {
                viewModel.FilterCommand.Execute(sender);
            }
        }

这很好用,但我希望跳过通过执行以下代码的代码:

OnPageIndexPagerChanged="{Binding Path=FilterCommand}"

这个,我已经为过滤器按钮做了,出现在我的主用户控件中,因此我认为我可以为这个事件做同样的事情。但是每次我收到一个错误:


Impossibile assegnare alla proprietà 'Super.Silverlight.SuperDataPager.OnPageIndexPagerChanged'。 [线:90 位置:55]


'iexplore.exe' (Silverlight): 加载 'C:\Program Files (x86)\Microsoft Silverlight\4.0.60531.0\it\mscorlib.resources.dll' su System.Windows.Application.LoadComponent(对象组件,Uri 资源定位器) su Super.Silverlight.SchedeConsuntivi.InitializeComponent() 苏 Super.Silverlight.SchedeConsuntivi..ctor()

抱歉,意大利语的错误,但我无法得到准确的翻译 ->(无法分配属性...)

有人可以解释一下这种行为吗?

感谢阅读,

[编辑] 这是主用户控件的我的视图模型:

 public class MyViewModel : DependencyObject, INotifyPropertyChanged
{
      public ICommand FilterCommand { get; set; }

      public MyViewModel()
      {
         FilterCommand = new Super.Silverlight.Tools.DelegateCommand<object>(p => Filter());
      }

    public void Filter()
    {
        //....blah blah blah...
    }
}

[/编辑]

【问题讨论】:

    标签: c# silverlight-4.0 mvvm


    【解决方案1】:

    首先,您的活动不是RoutedEvent,您应该考虑这一点。但这不是主要问题。

    当然,您不能将 ICommand 设置为 EventHandler。不要将 RoutedEvents 与 RoutedCommands 混淆。你有 2 个选项,你可以给你的 UserControl 一个 ICommand 类型的依赖属性,然后在你的代码中触发它。在 XAML 中,您现在可以绑定您的命令。或者,如果您想将其作为事件,再次考虑使用 RoutedEvents,有一些选项可以将命令绑定到 routedevents,例如 EventBehaviorFactory 等等。

    最简单的解决方案是直接在您的用户控件中使用 ICommand 并删除事件。

    【讨论】:

      【解决方案2】:

      恐怕你不能这样做,因为Command 是特殊类型的路由事件,而不是阅读DataPager 规范似乎不支持任何命令。相反,您在代码中所做的是分配给事件。

      编辑

      你也可以有workarrounds,但它肯定不会像你想要的那样。

      问候。

      【讨论】:

        猜你喜欢
        • 2013-02-02
        • 2021-12-24
        • 1970-01-01
        • 2012-06-11
        • 1970-01-01
        • 1970-01-01
        • 2018-06-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多