Я наткнулся на проблему и надеюсь, что кто-то сможет мне помочь в ее решении.Ошибка привязки WPF UserControl
У меня есть сборка с несколькими UserControls. Я бы хотел загрузить 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 делать привязку (от ABC в этом примере) в соответствии с xaml, загруженным из внешней сборки?
ли он работать просто –
Paparazzi
@nbulba это стандарт 'Button' с шаблоном по умолчанию? Если нет, и вы установили 'Content =" ABC "', он отображает _ABC_? – dkozl
@dkozl Да, если я оставлю Content = «ABC», он работает так, как ожидалось, поскольку привязка фактически не задействована. Да, это стандартная кнопка. – nbulba