将TextBox.Text转换为Int。 (无代码背后)

时间:2015-07-08 03:07:37

标签: c# wpf xaml binding icommand

我没有在互联网上找到解决我问题的解决方案。所以我真的希望有人可以帮助我。

所以基本上是标题所说的。我有这个

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并且仍然没有希望。

任何人都可以找到解决方案或以正确的方式帮助我。我有点卡住,不知道该怎么办。我可以编写一个带字符串的方法,但这会破坏使用库的目的。

1 个答案:

答案 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>