【问题标题】:Why this code not works ? Nothing happens after running ? I would like to have validation error in my view为什么这段代码不起作用?跑步后什么都没有?我想在我看来有验证错误
【发布时间】:2020-02-14 09:42:29
【问题描述】:

我在视图中有这样的代码

<TextBox 
        Text="{Binding MiejsceWykonaniaNadgodzin,  UpdateSourceTrigger=PropertyChanged}" 
        Name="MiejsceWykonaniaNadgodzinText" Margin="50 50 50 50">
    <Validation.ErrorTemplate>
        <ControlTemplate>
            <StackPanel>
                <!-- Placeholder for the TextBox itself -->
                <AdornedElementPlaceholder x:Name="textBox"/>
                <TextBlock Text="{Binding [0].ErrorContent}" Foreground="Red"/>
            </StackPanel>
        </ControlTemplate>
    </Validation.ErrorTemplate>
</TextBox>

以及模型中的此类代码

public string MiejsceWykonaniaNadgodzin
{
    get { return miejsceWykonaniaNadgodzin; }

    set
    {
        this.miejsceWykonaniaNadgodzin = "aaa";

        OnPropertyChanged();
    }
}

public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

protected void OnPropertyChanged( string miejsceWykonaniaNadgodzin = null)
{
    PropertyChanged?.Invoke(this, new System.ComponentModel.PropertyChangedEventArgs(miejsceWykonaniaNadgodzin));
}

我在我的文本框中写入了数字,例如2222,但那里没有显示错误。

【问题讨论】:

  • 试试OnPropertyChanged(nameof(MiejsceWykonaniaNadgodzin));
  • 为什么会出现错误? MiejsceWykonaniaNadgodzin 是一个字符串,2222 是一个有效字符串。您还将支持变量设置为固定字符串而不是设置器中的值,因此 miejsceWykonaniaNadgodzin 将始终设置为“aaa”
  • 你说得对,安迪,好观点。你能告诉我如何使用 OnPropertyChanged() 和双变量,之后我会看到验证错误吗?非常感谢你的帮助。

标签: c# wpf


【解决方案1】:
<TextBox Name="MiejsceWykonaniaNadgodzinText" Margin="50 50 50 50">
    <TextBox.Text>
       <Binding Path="MiejsceWykonaniaNadgodzin"  UpdateSourceTrigger="PropertyChanged" >
             <Binding.ValidationRules>
                  <local:MiejsceWykonaniaNadgodzinTextRule />
             </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
    <Validation.ErrorTemplate>
        <ControlTemplate>
            <StackPanel>
                <!-- Placeholder for the TextBox itself -->
                <AdornedElementPlaceholder x:Name="textBox"/>
                <TextBlock Text="{Binding [0].ErrorContent}" Foreground="Red"/>
            </StackPanel>
        </ControlTemplate>
    </Validation.ErrorTemplate>
</TextBox>

public class MiejsceWykonaniaNadgodzinTextRule : ValidationRule
{
    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        //example test
        if(value.ToString() == "aaa")
            return new ValidationResult(false, $"Error: value = aaa");
        return ValidationResult.ValidResult;
    }
}

别忘了修改

public string MiejsceWykonaniaNadgodzin
{
    get => miejsceWykonaniaNadgodzin;
    set
    {
        this.miejsceWykonaniaNadgodzin = value;//"aaa";

        OnPropertyChanged(nameof(MiejsceWykonaniaNadgodzin));
    }
}

【讨论】:

  • 非常感谢,但我遇到了一个错误。无法赋值,应为 ValidationRule 。我补充说我的 MyCustomConverter 实现 ValidationRule &lt;local:MyCustomConverter /&gt;
  • 你能告诉我你的 MyCustomConverter 实现吗
猜你喜欢
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
相关资源
最近更新 更多