未引用程序集中的C#/WPF UserControl绑定

未引用程序集中的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

我有一个动态加载的用户控件库。从该库中,我将Tabitem插入TabControl。我可以加载选项卡并显示它而不会出错。但是,我似乎无法使控件上的绑定正常工作

这是我用来加载它并将其添加到TabControl的代码:

    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中的数据上下文。我真的很感谢你的帮助!