【发布时间】:2015-06-19 20:20:56
【问题描述】:
我正在尝试从后面的代码向 XAML 添加一个 ValidationRule,并且需要这样做:
<TextBox.Text>
<Binding Path="Model.txt1.Value" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True">
<Binding.ValidationRules>
<localVal:RequiredValidate />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
到目前为止我已经尝试过了:
FrameworkElement SelectedObject = fe_dragged_control;
DependencyProperty property =
ControlBindingExtensions.GetDependencyPropertyFromName("Text", SelectedObject.GetType());
Binding binding = new Binding("Model." + SelectedObject.Name + ".Value");
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
binding.ValidatesOnDataErrors = true;
RequiredValidate role = new RequiredValidate();
binding.ValidationRules.Add(role);
SelectedObject.SetBinding(property, binding);
我在 google 上找到了这个,但我得到了以下结果(删除了不相关的属性以提高可读性:
<TextBox Text="{Binding ValidatesOnDataErrors=True,
Path=Model.txt0.Value,
UpdateSourceTrigger=PropertyChanged}" >
如何获得我需要的结果(第一个代码)?谢谢
【问题讨论】:
-
ValidatesOnDataErrors 正在处理 IDataErrorInfo 而不是 ValidationRules 试试这个
-
谢谢,但我不能使用 IDataErrorInfo,因为在我的情况下,我需要将验证保存在 xaml 中。我在用户选择控件时动态创建控件,他应该能够选择预定义的验证,然后保存网格以便稍后再次加载。
-
我不明白为什么你不能在这种情况下使用数据绑定,而实际上它是为这种情况而设计的,如果是这样,你也可以使用 IDataErrorInfo。创建一个表示选项的 VM,然后在 XAML 中将其绑定到它,并为显示网格的 VM 指定一个 DataTemplate。 WPF中常用的
-
我不确定我是否理解你。让我再告诉你一次。我需要动态创建 XAML。用户根据自己的需要拖放控件。然后选择验证。还支持版本控制,如果有新版本,相同的 XAML 可能会有不同的验证。我不想将验证规则放在数据库中,因为我会为用户进行的每个 EDIT 设置不同的行,这会及时在数据库中存在大量数据。将 ValidationRules 放入 XAML 将减小数据库大小并提高速度。
-
此问题中的代码看起来与另一位用户两小时前提出的代码相同。 stackoverflow.com/questions/30933502
标签: c# wpf xaml code-behind validationrules