无法将类型为'System.Windows.Data.Binding'的对象强制转换为'System.String

时间:2015-06-06 03:42:56

标签: c# wpf mvvm

您好我收到此错误

在类型'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命令完成此操作,因为我正在尝试。感谢

1 个答案:

答案 0 :(得分:0)

您的relay命令是类型<string>的泛型,因此它尝试将命令参数的绑定强制转换为字符串。

此处的内容将是一个框架元素,该元素由当时可用的DataTemplates确定。

将中继命令设为RelayCommand<object>。在中继命令的匿名方法中,x.GetType将告诉您那里设置的内容是什么。

希望这能解决你的疑虑。