据我所知,DataContext
通过逻辑树(或可视树,如果逻辑树被切断)级联。如果存在DataContext
,则可以将数据绑定到其中一个属性。
每当我查看它时,我都会看到Popup
的{{1}}与根DataContext
对象的DataContext
对象相同。
鉴于上述情况,为什么数据绑定不适用于Window
s ???
这是我用于测试的代码:
Popup
代码隐藏:
<Window x:Class="TestPopup.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:l="clr-namespace:TestPopup"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<l:ViewModel/>
</Window.DataContext>
<StackPanel>
<Button Margin="10" FontSize="30" Click="Button_OnClick">
<Button.Tag>Positron</Button.Tag>
<TextBlock>
Shoot <Run Text="{Binding Tag, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}}"/>s!
</TextBlock>
</Button>
<Button Margin="10" FontSize="30" Click="Button_OnClick">
<Button.Tag>Tachyon</Button.Tag>
<TextBlock>
Shoot <Run Text="{Binding Tag, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}}"/>s!
</TextBlock>
</Button>
<Popup Name="ThePopup" Placement="Center" StaysOpen="False" AllowsTransparency="True"
PlacementTarget="{Binding RelativeSource={RelativeSource AncestorType={x:Type StackPanel}}}">
<Border Background="White" BorderBrush="Black" BorderThickness="3" CornerRadius="20" Padding="5">
<TextBlock Text="{Binding Charge}" FontSize="30"/>
</Border>
</Popup>
</StackPanel>
</Window>
答案 0 :(得分:0)
DataBinding通过可视化树级联。 弹出窗口不是可视树的一部分。
解决这个问题的一种方法是将x:Name添加到RootElement(或任何其他具有相关DataContext的元素),并在弹出窗口的绑定中添加ElementName = ...
例如:
db.collection.createIndex({ UrlLink: 1 }, { unique: true })
Placement =“Center”StaysOpen =“False”AllowTransparency =“True” PlacementTarget =“{Binding RelativeSource = {RelativeSource AncestorType = {x:Type Grid}}}”&gt;
答案 1 :(得分:0)
弹出窗口不是可视化树的一部分,因此即使您为它们提供相同的DataContext,它也无法解析它。解决此问题的方法是通过a proxy binding as explained on this page提供。