Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从MVVM中的嵌套类调用ValidationResult_C#_Wpf_Xaml - Fatal编程技术网

C# 如何从MVVM中的嵌套类调用ValidationResult

C# 如何从MVVM中的嵌套类调用ValidationResult,c#,wpf,xaml,C#,Wpf,Xaml,我在同一个ViewModel中使用了ValidationResult,但是现在我需要在ViewModel类中创建一个嵌套类并实现ValidationResult,我不知道如何修改我的XAML来调用嵌套类 有什么帮助吗 public class AlgorithmSelectionViewModel : ValidationRule,INotifyPropertyChanged, IAlgorithmAccessor { private double _algorithmWeight = 1.0;

我在同一个
ViewModel
中使用了
ValidationResult
,但是现在我需要在
ViewModel
类中创建一个嵌套类并实现
ValidationResult
,我不知道如何修改我的XAML来调用嵌套类

有什么帮助吗

public class AlgorithmSelectionViewModel : ValidationRule,INotifyPropertyChanged, IAlgorithmAccessor
{
private double _algorithmWeight = 1.0;
public AlgorithmSelectionViewModel()
{ }
public double AlgorithmWeight
{
    get { return _algorithmWeight; }
    set
    {
        _algorithmWeight = value;
        OnPropertyChanged("AlgorithmWeight");
    }
}
public double MinAlgorithmWeight
{
    get;
    set;
}
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
    double AlgorithmWeight;
    Boolean noIllegalChars;
    noIllegalChars = double.TryParse(value.ToString(), out AlgorithmWeight);

    if (value.ToString().Length < 1)
    {
        return new ValidationResult(false, "Algorithm Weight field cannot be empty");
    }
    else if (noIllegalChars == false)
    {
        return new ValidationResult(false, "Illegal Characters");
    }
    else if (AlgorithmWeight <= MinAlgorithmWeight)
    {
        return new ValidationResult(false, "Value must be bigger or equal to " + MinAlgorithmWeight);
    }
    else
    {
        return new ValidationResult(true, null);
    }
 }
}
公共类算法SelectionViewModel:ValidationRule,INotifyPropertyChanged,IAlgorithMacAccessor
{
私有双算法权重=1.0;
公共算法SelectionViewModel()
{ }
公共双算法权重
{
获取{return\u algorithmWeight;}
设置
{
_算法权重=值;
OnPropertyChanged(“算法权重”);
}
}
公共双MinAlgorithmWeight
{
收到
设置
}
公共覆盖验证结果验证(对象值,CultureInfo CultureInfo)
{
双重算法权重;
布尔noilegalchars;
noIllegalChars=double.TryParse(value.ToString(),out AlgorithmWeight);
if(value.ToString().Length<1)
{
返回新的ValidationResult(false,“算法权重字段不能为空”);
}
else if(noIllegalChars==false)
{
返回新的ValidationResult(false,“非法字符”);
}

否则如果(AlgorithmWeight您绑定的对象模型是否实现了
IDataErrorInfo
?这是WPF出于验证目的所期望的接口。不,我没有,在嵌套类的情况下我是否需要它,因为当它在同一个ViewModel中或当我从ViewModel创建一个单独的类时,我建议实现任何vali使用
IDataErrorInfo
接口进行验证。这是WPF用来验证绑定的内容,也是
验证的内容。HasError
应该参考的内容。
 <TextBox Grid.Column="1" 
                             HorizontalAlignment="Stretch" 
                             Margin="0,0,0,15" 
                             Name="textBox_algorthWheight"
                             VerticalAlignment="Center">
                        <TextBox.Text>
                            <Binding Path="AlgorithmWeight" StringFormat="N1" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True">
                                <Binding.ValidationRules>
                                    <bulkWpf:AlgorithmSelectionViewMode MinAlgorithmWeight ="0"/>
                                </Binding.ValidationRules>
                            </Binding>
                        </TextBox.Text>
                        <TextBox.Style>
                            <Style  TargetType="{x:Type TextBox}">
                                <Style.Triggers>
                                    <Trigger Property="Validation.HasError" Value="true">
                                        <Setter Property="ToolTip"
                                                Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                                                Path=(Validation.Errors)[0].ErrorContent}"/>
                                    </Trigger>
                                </Style.Triggers>
                            </Style>
                        </TextBox.Style>
                    </TextBox>