【问题标题】:Update bindings for control created in code更新在代码中创建的控件的绑定
【发布时间】:2018-06-26 19:49:27
【问题描述】:

我创建了一个 UserControl,它有一些绑定到它的视图模型的值。 我想创建该 UserControl 的实例,为其提供视图模型,并将其保存到图像中,而无需实际显示在屏幕上的任何位置。

问题在于,当我创建 UserControl 的实例并为其提供视图模型时,绑定不会更新。所以我保存的图像是没有任何数据的控件。

如何强制更新我在代码中创建的用户控件的所有绑定,而不实际显示在屏幕上?

这是我写的一个简短的例子:

UserControl1.xaml:

<Grid>
    <TextBlock Name="txt" Text="{Binding}" />
</Grid>

UserControl1.xaml.cs

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        InitializeComponent();
    }

    internal string GetText()
    {
        return txt.Text;
    }
}

Test.cs

public void Test()
{
    UserControl1 uc1 = new UserControl1();
    uc1.DataContext = "Test";
    Console.WriteLine("The text is " + uc1.GetText());
}

我希望它打印出“文本是测试”,但它实际上打印出“文本是”。

【问题讨论】:

    标签: wpf data-binding user-controls


    【解决方案1】:

    我在调用InitializeComponent 之前通过设置DataContext 设法解决了这个问题。为此,我为我的用户控件创建了一个新的构造函数,如下所示:

    public UserControl1(object viewModel)
    {
        DataContext = viewModel;
        InitializeComponent();
    }
    

    如果我使用此构造函数,即使我从未在屏幕上显示控件,绑定也会起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 2012-12-17
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      相关资源
      最近更新 更多