假设以下视图模型定义:
public class MyObject {
public string Name { get; set; }
}
public interface IMyViewModel {
ICommand MyCommand { get; }
IList<MyObject> MyList { get; }
}
UserControl后面带有以下代码:
public class MyView : UserControl {
public IMyViewModel Model { get; }
}
如果我的XAML看起来像这样:
<UserControl>
<ListBox ItemsSource="{Binding MyList}">
<ListBox.ItemTemplate>
<TextBlock Text="{Binding Name}" />
<Button Content="Execute My Command" cmd:Click.Command="{Binding Path=MyCommand, ?????????}" cmd:Click.CommandParameter="{Binding}" />
</ListBox.ItemTemplate>
</ListBox>
如何将Button
绑定到代码隐藏类的ICommand
属性?
我正在使用Prism和SL 3.0,我需要将列表框中的每个按钮绑定到我的视图模型上的相同命令。
在UserControl
具有特定名称并且我能够使用ElementName
绑定之前,但现在我的UserControl
在同一父视图中多次使用,所以我不能再使用该技术,我无法弄清楚如何在XAML中执行此操作。
如果这是我唯一的选择,我可以在代码隐藏中手动执行,但如果可能的话,我宁愿在XAML中以声明方式执行此操作。
答案 0 :(得分:1)
您需要DataContextProxy才能使用此功能,因为您不再处于UserControl的上下文中。你已经离开了这一点,没有像DataContextProxy这样的东西回到那个上下文的好方法。我已将它用于我的项目,效果很好。