未引用程序集中的C#/WPF UserControl绑定
我有一个动态加载的用户控件库。从该库中,我将Tabitem插入TabControl。我可以加载选项卡并显示它而不会出错。但是,我似乎无法使控件上的绑定正常工作 这是我用来加载它并将其添加到TabControl的代码:未引用程序集中的C#/WPF UserControl绑定,wpf,dll,binding,user-controls,Wpf,Dll,Binding,User Controls,我有一个动态加载的用户控件库。从该库中,我将Tabitem插入TabControl。我可以加载选项卡并显示它而不会出错。但是,我似乎无法使控件上的绑定正常工作 这是我用来加载它并将其添加到TabControl的代码: Assembly moduleAssembly = Assembly.Load("ControlLib"); UserControl uc = (UserControl)Application.LoadComponent(new System
Assembly moduleAssembly = Assembly.Load("ControlLib");
UserControl uc = (UserControl)Application.LoadComponent(new System.Uri("/ControlLib;component/UserControl1.xaml", UriKind.RelativeOrAbsolute));
TabControl itemsTab = (TabControl)this.FindName("mainTabControl");
TabItem newTab = new TabItem();
newTab.Content = uc;
newTab.Header = "Test";
itemsTab.Items.Add(newTab);
itemsTab.SelectedItem = newTab;
这是控件的C#代码:
public partial class UserControl1 : UserControl
{
public static readonly DependencyProperty TestStringProperty =
DependencyProperty.Register("TestString", typeof(string), typeof(UserControl1));
public string TestString { get; set; }
public UserControl1()
{
InitializeComponent();
TestString = "Hello World";
}
}
<UserControl x:Class="ControlLib.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<TextBox Height="30" Width="100" HorizontalAlignment="Left" VerticalAlignment="Bottom" Text="{Binding Path=TestString, Mode=TwoWay}" />
</Grid>
</UserControl>
这是控件的XAML代码:
public partial class UserControl1 : UserControl
{
public static readonly DependencyProperty TestStringProperty =
DependencyProperty.Register("TestString", typeof(string), typeof(UserControl1));
public string TestString { get; set; }
public UserControl1()
{
InitializeComponent();
TestString = "Hello World";
}
}
<UserControl x:Class="ControlLib.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<TextBox Height="30" Width="100" HorizontalAlignment="Left" VerticalAlignment="Bottom" Text="{Binding Path=TestString, Mode=TwoWay}" />
</Grid>
</UserControl>
当该选项卡显示所有内容时,我会看到文本框中是否有空白,而不是“Hello World”
我缺少什么?您仍然需要将用户控件的DataContext设置为类的实例。创建该实例的方式不同于将dll加载到运行时。但从根本上讲,绑定设置保持不变
var assembly = Assembly.LoadFrom(@"yourdllname.dll");
Type type = assembly.GetType("ClassLibrary1.SampleViewModel");
object instanceOfMyType = Activator.CreateInstance(type);
DataContext = instanceOfMyType;
有关基本数据绑定的工作原理,请阅读MSDN
确保在屏幕顶部选择了正确的框架
编辑
通常,这是作为一个单独的类创建的(MVVM模式中的ViewModel)
公共部分类Window3:Window,INotifyPropertyChanged
{
公共窗口3()
{
初始化组件();
DataContext=this;
TestString=“你好,世界。”;
}
字符串_testString;
///获取或设置TestString。
公共字符串测试字符串
{
获取{return\u testString;}
设置{u testString=value;OnPropertyChanged(“testString”);}
}
公共事件属性更改事件处理程序属性更改;
公共void OnPropertyChanged(字符串propertyName)
{
if(PropertyChanged!=null)
{
var e=新的PropertyChangedEventArgs(propertyName);
财产变更(本,e);
}
}
}
如果我将DataContext设置为UC,它不会为整个应用程序分配DataContext吗?我需要它只是为了有问题的账单。我尝试将选项卡项datacontext设置为UC,也尝试将整个datacontext设置为UC,但都不起作用。我更新了代码以显示我正在使用的确切代码…您的代码有点不同,所以我尝试了它。无论哪种方式,我都会得到相同的结果…项显示,但绑定失败。我觉得我错过了一些“小”东西…请参见编辑。将datacontext设置为UC不会为整个应用程序分配datacontext。它由可视化树中的元素继承。除非我在你的需求中遗漏了什么,否则这里不需要依赖属性。谢谢SKG!这解决了我的问题。。。我不需要DP,我完全误解了UC中的数据上下文。我真的很感谢你的帮助!