XAML Itemscontrol 绑定到 属性 控件外
XAML Itemscontrol binding to property outside of the control
我有一个要加载到 ItemsControl 中的事务列表,但我想在每个 row/transaction 中显示我的视图模型中的 UserId。 userId 不在事务列表中,它是我尝试访问的视图模型中的 属性,但似乎我尝试过的所有方法都不起作用,而且我不知道为什么。我得到的只是一个空白列值。 (是的,我确实确认 属性 不是空的。甚至硬编码了一个值但什么也没有得到)。
我的理解是我应该能够使用 AncestorType 为 Window 的 RelativeSource 来访问 属性。我错过了什么吗?
<ItemsControl ItemsSource="{Binding Path=MyReportResult.Transactions}" KeyboardNavigation.IsTabStop="False">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="20 2 0 2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width=".15*"/>
<ColumnDefinition Width=".15*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" TextAlignment="Center" Margin="10 0 20 0" Text="{Binding Path=UserId, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"></TextBlock>
<TextBlock Grid.Column="0" TextAlignment="Center" Margin="10 0 20 0" Text="{Binding Path=Amount}"></TextBlock>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
您的 RelativeSource 绑定试图在父 Window 中找到 属性,尽管它在 Window 的 DataContext 中。
如果 UserId
属性 与 MyReportResult
在同一视图模型 class 中,则以下内容应该有效:
<TextBlock Text="{Binding Path=DataContext.UserId,
RelativeSource={RelativeSource AncestorType=ItemsControl}}"/>
只有 WPF 支持 RelativeSource,因为这不是绝对必要的。像这样使用 ElementName 不那么脆弱:
首先,将 x:Name="something" 指定给您的顶级对象或其子对象(通常是网格)。
Text="{Binding Path=DataContext.UserId, Element=something}"
我有一个要加载到 ItemsControl 中的事务列表,但我想在每个 row/transaction 中显示我的视图模型中的 UserId。 userId 不在事务列表中,它是我尝试访问的视图模型中的 属性,但似乎我尝试过的所有方法都不起作用,而且我不知道为什么。我得到的只是一个空白列值。 (是的,我确实确认 属性 不是空的。甚至硬编码了一个值但什么也没有得到)。
我的理解是我应该能够使用 AncestorType 为 Window 的 RelativeSource 来访问 属性。我错过了什么吗?
<ItemsControl ItemsSource="{Binding Path=MyReportResult.Transactions}" KeyboardNavigation.IsTabStop="False">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="20 2 0 2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width=".15*"/>
<ColumnDefinition Width=".15*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" TextAlignment="Center" Margin="10 0 20 0" Text="{Binding Path=UserId, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"></TextBlock>
<TextBlock Grid.Column="0" TextAlignment="Center" Margin="10 0 20 0" Text="{Binding Path=Amount}"></TextBlock>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
您的 RelativeSource 绑定试图在父 Window 中找到 属性,尽管它在 Window 的 DataContext 中。
如果 UserId
属性 与 MyReportResult
在同一视图模型 class 中,则以下内容应该有效:
<TextBlock Text="{Binding Path=DataContext.UserId,
RelativeSource={RelativeSource AncestorType=ItemsControl}}"/>
只有 WPF 支持 RelativeSource,因为这不是绝对必要的。像这样使用 ElementName 不那么脆弱:
首先,将 x:Name="something" 指定给您的顶级对象或其子对象(通常是网格)。
Text="{Binding Path=DataContext.UserId, Element=something}"