【问题标题】:Binding in my user control isn't working我的用户控件中的绑定不起作用
【发布时间】:2011-02-07 16:57:42
【问题描述】:

我创建了一个名为 TextBoxAndMore 的用户控件,其中包含一个文本框(称为 textBox1),旁边有一个“更多”按钮。在这个用户控件上,我有一个名为 Text 的属性。我希望这个 Text 属性能够镜像文本框中的文本。

我希望这个属性是可绑定的,以便在我的 XAML 中我可以将它绑定到我的 ViewModel 中名为 Description 的字符串属性,如下所示:

<my:TextBoxAndMore Text="{Binding Path=Description}" />

所以我有以下代码(由 propdb sn-p 生成):

    // Using a DependencyProperty as the backing store for Text.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty TextProperty =
        DependencyProperty.Register("Text", typeof(String), typeof(TextBoxAndMore),
        new UIPropertyMetadata(String.Empty));

    public String Text
    {
        get { return (String)GetValue(TextProperty); }
        set { SetValue(TextProperty, value); }
    }

而且,在文本框上,我将此代码附加到 TextChanged 事件处理程序,其想法是当用户在文本框中键入时,此用户控件的 Text 属性随之更改:

    private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
    {
        Text = textBox1.Text;
    }

但是,最终结果是绑定似乎根本不起作用。输出窗口中没有错误,我的 ViewModel 中的 Description 属性没有设置(它仍然为空)。

我确信这很明显,但我对 WPF 还是很陌生,希望得到一些指导。

【问题讨论】:

  • 您希望将绑定更改为TwoWay,而不是TextChanged 处理程序,以便用户所做的更新自动返回到属性。
  • 谢谢,我已将 XAML 更改为 &lt;my:TextBoxAndMore Text="{Binding Path=Security, Mode=TwoWay}" /&gt;(这是您的意思吗?)但我似乎仍然遇到同样的问题。

标签: c# wpf binding


【解决方案1】:

我认为你需要配置 2-way binding:

<my:TextBoxAndMore Text="{Binding Path=Description Mode=TwoWay}" />

您还可以删除控件中的 TextChanged 事件代码,并使用 TwoWay 绑定到控件的 Text 属性。

编辑:

== 双向绑定...

TextBlockInControlsTemplate TextDepPropInControl DescriptionPropInVM

【讨论】:

  • 谢谢。我已将我的 XAML 更改为此,但是我的 ViewModel 的 Description 属性仍然为空,无论我是否有 TextChanged 事件代码,还有什么我可能会丢失吗?
  • 嗯,在这种类型的设置中,VM 的描述不应该为空(我认为??)。您应该将其设置为空字符串或某种类型的默认值。最终这是唯一真正的字符串,其他一切都是指针(至少在逻辑上)。
  • 它现在似乎可以工作了,谢谢,但我必须将 TextChanged 行保留在那里(因为我不完全确定如何“使用 TwoWay 绑定到控件的 Text 属性”)。跨度>
  • 您应该能够将 textBox1.Text 绑定到您的 UserControl 的 Text 属性。我不确定您的应用程序是如何组合在一起的,以及当时的 DataContexts 是什么。
  • 您可以使用FrameworkPropertyMetadata 而不是UIPropertyMetadata 并设置它默认绑定双向。见msdn.microsoft.com/en-us/library/…
猜你喜欢
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 2011-08-11
相关资源
最近更新 更多