Joh*_*les 0 c# wpf xaml binding
我需要做这样的事情:http: //social.msdn.microsoft.com/Forums/en-US/wpf/thread/982e2fcf-780f-4f1c-9730-cedcd4e24320/
我决定按照约翰史密斯建议的最佳方式.
我试图在xaml中设置绑定,它不起作用(目标始终为null).
我决定在代码中手动设置绑定(用于调试目的),因此我需要执行DateRange对象的"SetBinding"方法.
DateRange类型的对象中不存在此方法.
有任何想法吗?
<TextBox Grid.Row="1"
Grid.Column="1"
Name="Xml_Name"
>
<TextBox.Text>
<Binding XPath="@name" UpdateSourceTrigger="PropertyChanged" >
<Binding.ValidationRules>
<local:UniqueValidationRule x:Name="uniqueDatasourcesRule001" >
<local:UniqueValidationRule.UniqueCollection>
<local:UniqueDependencyObject uu="{Binding ElementName=Xml_Name, Path=Name, UpdateSourceTrigger=PropertyChanged}" />
</local:UniqueValidationRule.UniqueCollection>
</local:UniqueValidationRule>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
public class UniqueDependencyObject : DependencyObject
{
public static readonly DependencyProperty uu11Property =
DependencyProperty.Register("uu", typeof(string), typeof(UniqueDependencyObject));
public string uu
{
set {
SetValue(uu11Property, value); }
get {
return (string)GetValue(uu11Property); }
}
}
public class UniqueValidationRule : ValidationRule
{
public UniqueDependencyObject UniqueCollection
{
get;
set;
}
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
// I set breakpoint to this line and check UniqueCollection.uu - it is always null
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
return new ValidationResult(true, null);
}
}
Run Code Online (Sandbox Code Playgroud)
//并在代码中绑定:
Binding binding = new Binding();
binding.ElementName = "Xml_Name";
binding.Path = new System.Windows.PropertyPath("Name");
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
UniqueValidationRule uVal = new UniqueValidationRule();
uVal.UniqueCollection = new UniqueDependencyObject();
BindingOperations.SetBinding(uVal.UniqueCollection, UniqueDependencyObject.uu11Property, binding);
Run Code Online (Sandbox Code Playgroud)
我没有阅读你所指的论坛帖子的所有细节,但我确定你需要先了解一些关于数据绑定的事情才能开始使用它.
数据绑定的目标是依赖属性
必须在从DependencyObject派生的类中声明依赖属性(至少当它不是附加属性时,我们不在这里谈论它们)
该SetBinding你正在寻找的方法是在一个static方法BindingOperations,或的方法FrameworkElement的.
因此,当您要在DataRange类的某些属性上设置绑定时,它必须从DependencyObject派生,您可以像这样设置绑定:
DataRange dataRange = ...
Binding binding = ...
BindingOperations.SetBinding(dataRange, DataRange.StartProperty, binding);
Run Code Online (Sandbox Code Playgroud)
如果DataRange派生自FrameworkElement,您可以这样写:
dataRange.SetBinding(DataRange.StartProperty, binding);
Run Code Online (Sandbox Code Playgroud)
这里DataRange.StartProperty的类型为DependencyProperty,表示Start
类DataRange 的依赖项属性.
您至少应该阅读MSDN文章数据绑定概述,依赖项属性概述和自定义依赖项属性.
归档时间: |
|
查看次数: |
5376 次 |
最近记录: |