C# MVVM中的Int属性处理RelayCommand

C# MVVM中的Int属性处理RelayCommand,c#,mvvm,int,relaycommand,C#,Mvvm,Int,Relaycommand,我有一处房产,看起来像这样: private int _wertungvalue; public int WertungValue { get { return _wertungvalue; } set { _wertungvalue = value; RaisePropertyChanged(() => WertungValue); } } 它被装订在一个文本框上 <TextBox Text="{Binding We

我有一处房产,看起来像这样:

private int _wertungvalue;
public int WertungValue
{
    get { return _wertungvalue; }
    set
    {
        _wertungvalue = value;
        RaisePropertyChanged(() => WertungValue);
    }
}
它被装订在一个文本框上

<TextBox Text="{Binding WertungValue, Mode=TwoWay}"/>
在Candelite中,我检查属性是否为int

private bool CanDelete()
{
    int ot = 0;

    if (int.TryParse(WertungValue.ToString(),out ot) == false)
        return false;
    else
        return true;
}
因此,RelayCommand只应在值为整数时工作。因此,这意味着当用户在“Test”中键入时,RelayCommand应该返回false。问题是它永远不会返回false,因为属性的值始终是整数,但在视图中它是字符串


我不想让属性在我的文本框中键入字符串或使用UpdateSourceTrigger=PropertyChanged。我也不想做一个只有数字的文本框。。。应该允许用户键入他想要的任何内容,但是RelayCommand应该只在他键入整数时才起作用。

我认为int属性不可能做到这一点。当绑定更新属性时,它会尝试将值转换为整数,这会在用户输入“Test”时导致异常,因此该值永远不会更新并保持为5


我认为您需要两个属性:一个是string类型,另一个是int类型(或者int?)。文本框绑定到string属性,在setter中,您可以检查值是否可以被解析,并相应地更新int属性。

您不能做您想做的事。您将得到一个绑定错误,并且您的“集”将永远不会在您的属性上被调用。将
UpdateSourceTrigger
设置为“PropertyChanged”无助于解决问题。您不需要将单个属性设置为字符串……但应该添加第二个属性,将文本框绑定到.K,thx。但我很好奇视图如何检查绑定类型。它必须制作一个TryParse(或任何东西)来检查输入的类型。它不是在属性中执行,而是在。。。??我的意思是在绑定和属性之间必须有某种东西来检查输入的类型。它检查属性的类型并看到“int”。因此,它需要先将字符串转换为整数,然后才能调用setter。如果此转换失败,将引发异常,并且永远不会调用属性的setter。是否有任何方法可以访问此异常(在我的ViewModel中)?以下是一些可能的解决方案:
private bool CanDelete()
{
    int ot = 0;

    if (int.TryParse(WertungValue.ToString(),out ot) == false)
        return false;
    else
        return true;
}