我没有在互联网上找到解决我问题的解决方案。所以我真的希望有人可以帮助我。
所以基本上是标题所说的。我有这个
public MyCommand Champion
{
get
{
return new MyCommand((id) =>
{
ChampionById(id);
});
}
set { _champion = value; }
}
private async void ChampionById(object id)
{
_staticRiotApi.GetChampion(Region.euw, (int)id);
}
我在视图中绑定了一个Button,看起来很像这个,非常简单。
<Button Content="Search By Id" Command="{Binding Champion}" CommandParameter="{Binding ElementName=championId}">
</Button>
<TextBox Grid.Row="0" Grid.Column="1" Name="championId"></TextBox>
方法GetChampion需要一个冠军的ID,我在文本框中输入,然后将其作为“id”传递,所以我尝试将其转换为int。我得到了这个(如上所述),我得到了这个
“RiotApiApplication.exe中发生了'System.InvalidCastException'类型的异常,但未在用户代码中处理 其他信息:指定演员无效。“
我尝试了Convert.ToInt32(id)我得到了这个:
无法将“System.Windows.Controls.TextBox”类型的对象强制转换为“System.IConvertible”。
所以我的下一次尝试是尝试包含一个转换器,它接受文本框的输入并将其转换为整数。例如。 “Aatrox”== 266,看起来像这样。 (我知道这不是最好的解决方案,但我只想让它先工作)
switch (value as string)
{
case "Aatrox":
value = 266;
break;
}
return value;
但仍然遇到同样的问题。 所以我尝试创建一个新的MyCommand类,它是Generic所以它返回了Integer并且仍然没有希望。
任何人都可以找到解决方案或以正确的方式帮助我。我有点卡住,不知道该怎么办。我可以编写一个带字符串的方法,但这会破坏使用库的目的。
答案 0 :(得分:1)
您正在引用错误的对象作为您的命令参数 - 您将文本框本身传递给您的命令而不是包含textelement。 为了解决这个问题,您必须在命令参数绑定中使用“Path”语法:
<Button Content="Search By Id" Command="{Binding Champion}" CommandParameter={Binding ElementName=championId, Path=Text}">
</Button>
<TextBox Grid.Row="0" Grid.Column="1" Name="championId"></TextBox>