【发布时间】:2015-09-25 23:02:31
【问题描述】:
我在 UserControl 中有以下 XAML:
<StackPanel Orientation="Horizontal" Name="spContainer">
<TextBlock x:Name="tbLabelBefore" MinWidth="50" Text="{Binding LabelBefore}"></TextBlock>
<TextBox Name="txtKey" MinWidth="120"></TextBox>
<TextBlock Name="tbValue" MinWidth="50"></TextBlock>
</StackPanel>
接下来我想动态设置绑定到 TextBox-txtKey 从代理类上的 Text 属性。
我执行以下操作:
MDLookup lok = SelectedObject as MDLookup;
string bnd = "Model."+ lok.Name +".Value";
Binding binding = new Binding(bnd);
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
//binding.ValidatesOnDataErrors = true;
//binding.NotifyOnValidationError = true;
binding.Mode = BindingMode.TwoWay;
lok.TxtKey.SetBinding(TextBox.TextProperty, binding);
这里 lok 是我的用户控件的实例。而 TxtKey 是我的 TextBox 类型的 UserControl 中的属性,它返回 txtKey 元素:
[XmlIgnore]
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public TextBox TxtKey
{
get { return this.txtKey; }
set { this.txtKey = value; }
}
如果我说:
lok.TxtKey.Text = "Some Text"
这行得通。 此设置绑定的代码也适用于我的用户控件的构造函数。但这里没有。知道为什么吗?
附加:我已经验证了 ShouldSerializeContent
public override bool ShouldSerializeContent()
{
return false;
}
重点是我从数据库中的多个控件序列化 xaml,然后动态加载和设置 DataContext。
【问题讨论】:
-
string bnd = "Model.+ lok.Name +.Value";这是不正确的绑定语法。你到底想绑定什么?您的问题不清楚。 -
即绑定路径,可以是任意字符串。那不是问题。这是正确的语法,我只是忘记了引号: string bnd = "Model."+ lok.Name +".Value";我的 DataContext 有动态属性模型,在它的集合中我有动态命名的模型 lok.Name 和属性值,所以路径是正确的。
标签: c# .net wpf xaml data-binding