wpf - 如何将 Click= 数据绑定(bind)到对象而不是页面上的函数

标签 wpf silverlight data-binding

我正在使用 Silverlight,但我也对 WPF 答案感兴趣

我有一个数据绑定(bind)到“收藏夹”链接列表的列表。每个收藏夹都包含一个姓名和一个电话号码。

该列表绑定(bind)到描述图形方面的 DataTemplate。在这个模板中有一个按钮——拨号。当您单击该按钮时,我希望调用收藏夹的 Dial() 方法。现在调用页面/窗口的 Dial 方法。

如果这是不可能的,有没有办法让我的收藏夹以某种方式附加到按钮上?这样我就知道哪个收藏夹与按下按钮相关联?

下面的 XAML 不起作用,Text="{Binding Name}"效果很好,因为它绑定(bind)到收藏夹上的 Name 属性,但 Click="{Binding Dial}"不会在收藏夹上调用 Dial()。

    <DataTemplate x:Key="DataTemplate1">
        <StackPanel d:DesignWidth="633" Orientation="Horizontal" Height="93">
            <Button x:Name="DialButton" Content="Edit" Click="{Binding Dial}"/>
            <TextBlock x:Name="TextBlock" TextWrapping="Wrap" Text="{Binding Name}" FontSize="64" Height="Auto" FontFamily="Segoe WP SemiLight"/>                                      
        </StackPanel>
    </DataTemplate>

最佳答案

所以应该这样:

<Button CommandParameter="{Binding}" Command="{Binding Dial}"/>

然后您将收到数据对象作为命令参数。在这种情况下,您必须提供一个名为 Dial 的属性并返回一个 ICommand 实现。如果该属性在数据对象上不可用,但在主类(代码隐藏)上不可用,则必须在绑定(bind)中查找它,为此使用 RelativeSource 关键字。


另一种方法是创建一个点击处理程序。在单击处理程序中,您可以将发送者强制转换为 Button(或 FrameworkElement),然后从 DataContext 获取数据对象。我假设您尝试创建这样的解决方案。

private void Button_Click(object sender, RoutedEventArgs e) {
    Button btn = (Button)sender;
    MyObject obj = btn.DataContext as MyObject; 
    if(null != obj){
         obj.Dial();
         // or Dial(obj);
    }
}

标记必须如下:

<Button x:Name="DialButton" Content="Edit" Click="Button_Click"/> 

主要区别是,我从 Click-Event 中删除了绑定(bind)并注册了一个事件处理程序。


第三种解决方案是在 Button.ClickEvent 的代码后面注册一个处理程序。原理与第二个例子类似。

我不太了解silverlight。也许还有一些其他的事情。

关于wpf - 如何将 Click= 数据绑定(bind)到对象而不是页面上的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3220859/

相关文章:

java - 如何为我的 SWT WPF 程序设置主题?

WPF XAML : How to disable multi selection in a DataGrid?

c# - 我什么时候取消订阅自定义控件中的事件

.net - 允许用户对 DataGridView 中的 LINQ 查询中的列进行排序

data-binding - DataGrid 是 UWP 的替代品吗?

forms - Spring MVC - 部分绑定(bind)到表单时如何不丢失字段值

c# - 如何使用 WPF 创建平面组合框?

c# - WPF:使用随 'AddFontMemResourceEx' 安装的字体仅用于进程

c# - windows phone 7 图片应用图片转场,如何自己制作?

c# - 如何在 Silverlight 中将 List<object> 绑定(bind)到 DataGrid?