【发布时间】:2015-01-23 16:12:55
【问题描述】:
我偶然发现了一个问题,希望有人能帮我解决它。
我有一个带有一些用户控件的程序集。我想在运行时从该 external 程序集中加载一个 UserControl(稍后对其进行截图而不在屏幕上显示)。
UserControl xaml
<UserControl x:Class="MyAssembly.Test"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Button x:Name="TD1"
Height="30"
Width="100"
Content="{Binding ABC}"/>
</Grid>
</UserControl>
“视图模型”
public class TestClass : INotifyPropertyChanged
{
private string _abc = "Initial value";
public event PropertyChangedEventHandler PropertyChanged;
public string ABC
{
get
{
return _abc;
}
set
{
if (value == _abc)
{
return;
}
_abc = value;
OnPropertyChanged1("ABC");
}
}
protected virtual void OnPropertyChanged1(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
让人头疼的一段代码
Assembly.LoadFrom("MyAssembly.dll");
var uri = new Uri(@"/MyAssembly;component/Test.xaml"), UriKind.Relative);
var view = (Control)Application.LoadComponent(uri);
view.Width = 800;
view.Height = 600;
view.RenderSize = new Size(800, 600);
view.Background = Brushes.White;
var viewModel = new TestClass();
view.DataContext = viewModel;
viewModel.ABC = "7";
但是,无论是设置 DataContext 还是更改 ABC 属性 TD1 内容都没有发生变化。它总是保持为空(如果我用调试器查看它)。
如何强制 .Net 根据从外部程序集加载的 xaml 进行绑定(本例中为 ABC)?
【问题讨论】:
-
它是否只适用于
-
@nbulba 是标准的
Button默认模板吗?如果否并且您设置了Content="ABC",它是否显示ABC? -
@dkozl 是的,如果我离开 Content="ABC" 它会按预期工作,因为实际上不涉及绑定。是的,它是一个标准的 Button。
-
@Blam 不,它不适用于仅文本框。
标签: wpf xaml data-binding user-controls