我正在使用Wpf而我正在将List<Value>
传递给xaml中的<ItemsControl>
。我想将string
对象中的Value
绑定到Button的命令。这个xaml部分看起来像这样:
<Grid Margin="0,0,2,0">
<Grid Margin="10">
<ItemsControl Name="details">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="0,0,0,5">
<Grid.ColumnDefinitions>
....
</Grid.ColumnDefinitions>
...
<Button Grid.Column="2"
Content="{Binding ButtonContent}"
Visibility="{Binding ButtonVisibility}"
Command="{Binding ButtonClickMethod}" />
...
我的Value
课程如下:
public class Value
{
...
public string ButtonClickMethod { get; set; }
}
我正在设置字符串链接:
v.ButtonClickMethod = "RelatedActivityId_OnClick";
并且Method在同一个类中,看起来像这样:
private void RelatedActivityId_OnClick(object sender, RoutedEventArgs e)
{
MessageBox.Show("RelatedActivityId_OnClick");
}
除此之外的所有内容都正常工作,并且绑定时使用相同的Object。 我做错了什么?
答案 0 :(得分:1)
Button的Command
属性类型为ICommand
,因此您无法将其绑定到string
值。
您需要将ButtonClickMethod
更新为ICommand类型,或者创建一个新属性以将Command
绑定到。
有关ICommand的示例实现,请参阅this答案。
如果您需要按钮来执行基于参数的代码(字符串值?),那么您可以使用CommandParameter
属性,然后在命令处理程序中使用该参数。
public class Value
{
public Value()
{
ButtonCommand = new RelayCommand((a) => true, CommandMethod);
}
public RelayCommand ButtonCommand {get; set; }
public string ButtonClickMethod { get; set; }
private void CommandMethod(object obj)
{
MessageBox.Show(obj?.ToString());
}
}
和XAML:
<Button Grid.Column="2"
Content="{Binding ButtonContent}"
Visibility="{Binding ButtonVisibility}"
Command="{Binding ButtonCommand}"
CommandParameter="{Binding ButtonClickMethod}" />
答案 1 :(得分:1)
Button.Command属性仅绑定到实现ICommand接口的对象。 如果要调用其名称为ButtonClickMethod的方法,则必须: