您好我收到此错误
在类型'System.Windows.Data.Binding'上调用与指定绑定约束匹配的构造函数会引发异常。 {“无法将'System.Windows.Data.Binding'类型的对象强制转换为'System.String'。”}
下面有一个关于单选按钮的课程
public class GroupedList
{
public string Group { get; set; }
public bool IsSelected { get; set; }
}
然后在我的视图模型中,我有一个可观察的这个类的集合
/// <summary>
/// The <see cref="GroupList" /> property's name.
/// </summary>
public const string GroupListPropertyName = "GroupList";
private ObservableCollection<GroupedList> _groupList = new ObservableCollection<GroupedList>();
/// <summary>
/// Sets and gets the GroupList property.
/// Changes to that property's value raise the PropertyChanged event.
/// </summary>
public ObservableCollection<GroupedList> GroupList
{
get { return _groupList; }
set { Set(GroupListPropertyName, ref _groupList, value); }
}
在我看来,我有一个带有单选按钮作为模板的组合框。 ComboBox ItemSource设置为Collection。 Content和IsCheckedProperties设置为类中的两个属性。
<ComboBox Name="groupCombo" ItemsSource="{Binding GroupList}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<RadioButton x:Name="GroupButton"
GroupName="Options1"
Content="{Binding Group}"
IsChecked="{Binding IsSelected}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<command:EventToCommand Command="{Binding
{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type UserControl}}, Path=DataContext.GroupChecked}}"
CommandParameter="{Binding Content,ElementName=GroupButton}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</RadioButton>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
我添加了事件触发器,尝试访问视图模型中以下relay命令中checked事件的content属性。
private RelayCommand<string> _groupChecked;
/// <summary>
/// Gets the GroupChecked.
/// </summary>
public RelayCommand<string> GroupChecked
{
get
{
return _groupChecked
?? (_groupChecked = new RelayCommand<string>(
x =>
{
if (!string.IsNullOrWhiteSpace(x))
{
//DoStuff
}
}));
}
}
添加命令之后,错误正在发生,我想,但不确定它是否因为这行CommandParameter="{Binding Content,ElementName=GroupButton}" />
投掷我想知道我是否可以使用relay命令完成此操作,因为我正在尝试。感谢
答案 0 :(得分:0)
您的relay命令是类型<string>
的泛型,因此它尝试将命令参数的绑定强制转换为字符串。
此处的内容将是一个框架元素,该元素由当时可用的DataTemplates确定。
将中继命令设为RelayCommand<object>
。在中继命令的匿名方法中,x.GetType
将告诉您那里设置的内容是什么。
希望这能解决你的疑虑。