gpt4 book ai didi

c# - 如何在 WPF View 中获取无效值

转载 作者:行者123 更新时间:2023-11-30 22:59:14 25 4
gpt4 key购买 nike

如果我有一个带有绑定(bind)到小数点(或任何其他数字格式)的文本框的 WPF View ,如果我输入字母或任何其他无效字符并且该值未传输到viewmodel(永远不会到达 setter 上的断点)。如果我输入一个数字,一切正常。要禁用我的保存按钮 (ICommand),我想以类似 MVVM 的方式在我的 View 模型中获取有关 View 中存在错误的信息。非常欢迎提示记录此行为的位置!

所以目标情况是这样的:

current situation as is by WPF standard

我想要的是禁用“保存并关闭”: enter image description here

XAML:

<TextBox Text="{Binding Path=SelectedItem.Punkte_Seite_max, UpdateSourceTrigger=PropertyChanged}"/>

View 模型

public int Punkte_Seite_max
{
get { return _punkte_Seite_max; }
set
{
_punkte_Seite_max = value;
Changed(); //INotifyPropertyChanged call
}
}

最佳答案

您想要使用的是 INotifyDataErrorInfo 找到的文档 here .这使您可以对绑定(bind)到 ViewModel 的属性提供自定义验证。

这是我从CodeProject 无耻复制的样本但我这样做是为了防止任何链接失效。我也尝试稍微调整它以匹配您的示例。

View 模型

public class ViewModel : INotifyDataErrorInfo
{
// A place to store all error messages for all properties.
private IDictionary<string, List<string>> propertyErrors = new Dictionary<string, List<string>>();

public string Preis
{
get { return _preis; }
set
{
// Only update if the value has actually changed.
if (!string.Equals(_preis, value, StringComparison.Ordinal))
{
_preis = value;
Changed();

this.Validate();
}
}
}

// The event to raise when the error state changes.
public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;

// A method of getting all errors for the given known property.
public System.Collections.IEnumerable GetErrors(string propertyName)
{
if (propertyName != null)
{
if (propertyErrors.TryGetValue(propertyName, out var errors))
{
return errors;
}
}

return null;
}

// Whether there are any errors on the ViewModel
public bool HasErrors
{
get
{
return propertyErrors.Values.Any(r =>r.Any());
}
}

private void Validate()
{
// 1. HERE YOU CAN CHECK WHETHER Preis IS VALID AND ANY OTHER PROPERTIES
// 2. Update the 'propertyErrors' dictionary with the errors
// 3. Raise the ErrorsChanged event.
}
}

XAML

您需要将 XAML 更改为如下内容:

<TextBox>
<Binding Path="Preis" UpdateSourceTrigger="PropertyChanged" ValidatesOnNotifyDataErrors="True"/>
</TextBox>

关于c# - 如何在 WPF View 中获取无效值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52392311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com