与silverlight WP7的相对绑定命令

时间:2011-06-28 07:52:03

标签: silverlight windows-phone-7 binding

将命令绑定到ItemsControl中的按钮时出错。

这是我的代码:

<phone:PhoneApplicationPage.DataContext>
    <ViewModel:MyViewModel />
</phone:PhoneApplicationPage.DataContext>

with:

<ItemsControl ItemsSource="{Binding MyList}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Button Content="Test" 
                cmd:ButtonBaseExtensions.Command="{Binding MyViewModel.TestCommand}" 
                cmd:ButtonBaseExtensions.CommandParameter="{Binding}"/>
    </ItemsControl.ItemTemplate>
</ItemsControl>

我得到了:

System.Windows.Data Error: BindingExpression path error: 'MyViewModel' property not found on '...' '...' (HashCode=77119633). BindingExpression: Path='MyViewModel.ChooseCommand' DataItem='...' (HashCode=77119633); target element is 'System.Windows.Controls.Button' (Name=''); target property is 'Command' (type 'System.Windows.Input.ICommand')..

当然,我应该使用绝对绑定或相对绑定,但我不知道该怎么做。

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:1)

您的Button位于ItemsControl范围内,该MyList属于youur IEnumerable属性,我猜这是一个List或某种DataContext类型。每个Button的{​​{1}}将是其代表的MyList内的项目。

你是正确的,要将按钮绑定到顶级视图模型,您需要某种相对源绑定,Silverlight(3)不支持。

我在这里为Silverlight创建了一个相对源代码绑定替换:

http://www.scottlogic.co.uk/blog/colin/2009/02/relativesource-binding-in-silverlight/

然而,对于性能非常重要的WP7,我不会使用它!

为什么不在视图模型中简单地创建所需的关系?即对于MyList中的每个项目(让我们称之为MyListItem),公开一个指向父视图模型的属性。换句话说,拥有MyListItem.Parent属性,该属性指向MyViewModel