我正在尝试将MainWindow
中的一些数据绑定到第二个文件(类型:UserControl
)。第二个xaml文件应包含TabItem
的数据。
我找到了这个答案:wpf : Bind to a control in another xaml file
但不知怎的,我没有得到它,也许是因为我是wpf和xaml的新手。
我做了一个简短的例子,以显示我的问题:
主窗口:
<Window x:Class="BindingBetweenFiles.MainWindow"
...
xmlns:local="clr-namespace:BindingBetweenFiles"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<TabControl Height="200">
<TabItem Header="Tab 1">
<local:Tab1 />
</TabItem>
</TabControl>
<TextBlock Name="txtblock1">This text should be shown in the tab.</TextBlock>
</StackPanel>
</Window>
Tab1(TabItem的内容):
<UserControl x:Class="BindingBetweenFiles.Tab1"
...
xmlns:local="clr-namespace:BindingBetweenFiles"
mc:Ignorable="d"
DataContext="local:MainWindow"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Label Content="{Binding DataContext.txtblock1.Text, RelativeSource={
RelativeSource AncestorType={x:Type local:MainWindow}}}"/>
</Grid>
我想知道DataContext
的声明是否错误或绑定是否有问题?
我非常感谢您提供的任何帮助。
答案 0 :(得分:1)
假设您希望能够将psql
绑定到string
“文本”,请在Tab1
的代码隐藏中创建DependencyProperty
:
UserControl
然后在public string TabText
{
get { return (string)GetValue(TabTextProperty); }
set { SetValue(TabTextProperty, value); }
}
public static readonly DependencyProperty TabTextProperty = DependencyProperty.Register("TabText", typeof(string), typeof(Tab1), new PropertyMetadata("Default"));
XAML:
Tab1
然后在你的Window XAML中:
<UserControl x:Class="BindingBetweenFiles.Tab1"
...
xmlns:local="clr-namespace:BindingBetweenFiles"
mc:Ignorable="d"
DataContext="local:MainWindow"
d:DesignHeight="300" d:DesignWidth="300"
x:Name="tab1Control">
<Grid>
<Label Content="{Binding ElementName=tab1Control, Path=TabText"/>
</Grid>
或者您也可以绑定到TabText,例如:
<local:Tab1 TabText="The text you want to place."/>