0
我有一个用户控制库,我正在动态加载。从那个lib中,我将Tabitem插入TabControl。我可以加载选项卡,并显示它没有错误。但是,我似乎无法获得控制工作的约束力。未引用的程序集中的C#/ WPF UserControl绑定
这是我使用加载它,并将它添加到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";
}
}
这是该XAML代码控制:
<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设置为UC将不会为整个应用程序分配DataContext?我只是需要它的问题标签。我尝试设置选项卡项目datacontext到UC,我也尝试将整个DataContext设置为UC,都没有工作。我更新了代码以显示我正在使用的确切代码...您的代码有点不同,所以我尝试了它。无论哪种方式,我都会得到相同的结果...项目显示但绑定失败。我觉得我错过了一些'小'的东西... –
见编辑。将数据上下文设置为UC将不会为整个应用程序分配数据上下文。它由视觉树中的元素继承。除非我在你的需求中丢失了某些东西,否则这里不需要依赖属性。 – SKG
谢谢SKG!这解决了我的问题......我不需要DP,我完全误解了UC中的DataContext。我真的很感谢你的帮助! –