更新在代码中创建的控件的绑定
Update bindings for control created in code
我创建了一个 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());
}
我期待它打印出 "The text is Test",但它实际上打印出 "The text is"。
我通过在调用 InitializeComponent
之前设置 DataContext 设法解决了这个问题。为此,我为我的用户控件创建了一个新的构造函数,如下所示:
public UserControl1(object viewModel)
{
DataContext = viewModel;
InitializeComponent();
}
如果我使用此构造函数,即使我从未在屏幕上显示该控件,绑定也会起作用。
我创建了一个 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());
}
我期待它打印出 "The text is Test",但它实际上打印出 "The text is"。
我通过在调用 InitializeComponent
之前设置 DataContext 设法解决了这个问题。为此,我为我的用户控件创建了一个新的构造函数,如下所示:
public UserControl1(object viewModel)
{
DataContext = viewModel;
InitializeComponent();
}
如果我使用此构造函数,即使我从未在屏幕上显示该控件,绑定也会起作用。