gpt4 book ai didi

wpf - 如果不指定祖先,绑定(bind)将不起作用

转载 作者:行者123 更新时间:2023-12-02 04:01:45 24 4
gpt4 key购买 nike

如果我指定祖先,则下面的组合框绑定(bind)有效,否则无效。如果我不指定祖先,为什么它不起作用?

<wpftoolkit:DataGrid Grid.Row="4" Grid.Column="1" Grid.ColumnSpan="2"
Margin="5"
BorderBrush="#A6A6A6"
BorderThickness="1"
ItemsSource="{Binding DebitListing}"
AutoGenerateColumns="False"
SelectionMode="Single">
<wpftoolkit:DataGrid.Columns>
<wpftoolkit:DataGridComboBoxColumn
Header="{Resx ResxName=MyBooks.Properties.Strings, Key=PartyListing_Party_Label}"
SelectedItemBinding="{Binding Party, ValidatesOnDataErrors=True}"
DisplayMemberPath="Name">

<wpftoolkit:DataGridComboBoxColumn.ElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding Path=DataContext.CreditedAccounts, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
</Style>
</wpftoolkit:DataGridComboBoxColumn.ElementStyle>
<wpftoolkit:DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding Path=DataContext.CreditedAccounts, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
</Style>
</wpftoolkit:DataGridComboBoxColumn.EditingElementStyle>

</wpftoolkit:DataGridComboBoxColumn>

<wpftoolkit:DataGridTextColumn
Header="{Resx ResxName=MyBooks.Properties.Strings, Key=PartyListing_Amount_Label}"
Binding="{Binding Amount, ValidatesOnDataErrors=True}"/>
</wpftoolkit:DataGrid.Columns>
</wpftoolkit:DataGrid>

最佳答案

您需要引用从中获取所需 DataContext 的祖先的原因是因为 wpftoolkit 更改了其呈现的子元素上的数据上下文。您会发现几乎所有 ListView/DataGrid 控件都是如此 - 子元素 DataContext 被更改为引用当前行或列所代表的集合项。如果您希望这些子元素的模板或样式中的某些内容基于控件的 DataContext 之外的属性,您需要使用 RelativeSource Ancestor 来获取它。

我知道这很令人困惑,因为在基本 XAML 中,子元素总是自动继承其父元素的数据上下文,但 DataContext 就像任何其他 DependencyProperty 一样,复杂的控件可以根据需要对其进行不同的设置。

如果愿意,您可以通过为父控件(或 DataContext 设置的任何元素)命名来简化语法,例如 x:Name='ControlRoot'。然后当你需要回到你的根数据上下文时,你只需要去:

Value="{Binding ElementName=ControlRoot, Path=DataContext.CreditedAccounts}"

关于wpf - 如果不指定祖先,绑定(bind)将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10192404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com