WPF 绑定的问题

jxnc8610 2017-06-29 01:01:31
1  <ItemsControl Grid.Row="1" x:Name="PMItmsControl" VerticalAlignment="Top" ItemsSource="{Binding FirstEntity}">
2 <ItemsControl.ItemsPanel>
3 <ItemsPanelTemplate>
4 <VirtualizingStackPanel Orientation="Vertical"/>
5 </ItemsPanelTemplate>
6 </ItemsControl.ItemsPanel>
7 <ItemsControl.ItemTemplate>
8 <DataTemplate>
9 <Border CornerRadius="5" BorderBrush="YellowGreen" BorderThickness="1" Margin="5">
10 <Grid Width="auto" Height="100" VerticalAlignment="Top">
11 <Grid.RowDefinitions>
12 <RowDefinition/>
13 </Grid.RowDefinitions>
14 <Grid.ColumnDefinitions>
15 <ColumnDefinition Width="60*"/>
16 <ColumnDefinition Width="40*"/>
17 </Grid.ColumnDefinitions>
18 <TextBlock Width="100" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10" Text="{Binding FirstName}" FontSize="10" >
19 </TextBlock>
20 <ItemsControl ItemsSource="{Binding SecondEntity}" Grid.Column="1" VerticalAlignment="Top">
21 <ItemsControl.ItemsPanel>
22 <ItemsPanelTemplate>
23 <VirtualizingStackPanel Orientation="Vertical"/>
24 </ItemsPanelTemplate>
25 </ItemsControl.ItemsPanel>
26 <ItemsControl.ItemTemplate>
27 <DataTemplate>
28 <Grid>
29 <Grid.ColumnDefinitions>
30 <ColumnDefinition Width="50*"/>
31 <ColumnDefinition Width="50*"/>
32 </Grid.ColumnDefinitions>
33 <TextBlock Text="{Binding SecondName}" Margin="5" Foreground="White" />
34 <TextBlock Grid.Column="1" Text="{Binding Path= DataContext.FirstName, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ItemsControl},AncestorLevel=2}}" Margin="5" Width="40">
35 </TextBlock>
36 </Grid>
37 </DataTemplate>
38 </ItemsControl.ItemTemplate>
39 </ItemsControl>
40 </Grid>
41 </Border>
42 </DataTemplate>
43 </ItemsControl.ItemTemplate>
44 </ItemsControl>

public class FirstEntity 
{
public string FirstName { get; set; }
public SecondEntity SecondEntity { get; set; }
}

public class SecondEntity
{
public string SecondName { get; set; }
}


为什么在第二个ItemsControl里面绑定第一个ItemsControl里的FirstName不行,应该怎么绑定呢?
...全文
122 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxnc8610 2017-06-29
  • 打赏
  • 举报
回复
引用 9 楼 duanzi_peng 的回复:
[quote=引用 8 楼 jxnc8610 的回复:] 谢谢,你这种方法是可以的。但是为什么我用那种方法不行呢?还有其它方法吗?
]因为属性FirstName 不在ItemsControl上,而是在它的ItemTemplate上。还可以: <Grid Width="auto" Height="100" VerticalAlignment="Top" DataContext="{Binding .}"> <TextBlock Grid.Column="1" Text="{Binding DataContext.FirstName,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Grid,AncestorLevel=2}}" [/quote] 谢谢。
exception92 2017-06-29
  • 打赏
  • 举报
回复
引用 8 楼 jxnc8610 的回复:
谢谢,你这种方法是可以的。但是为什么我用那种方法不行呢?还有其它方法吗?
]因为属性FirstName 不在ItemsControl上,而是在它的ItemTemplate上。还可以: <Grid Width="auto" Height="100" VerticalAlignment="Top" DataContext="{Binding .}"> <TextBlock Grid.Column="1" Text="{Binding DataContext.FirstName,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Grid,AncestorLevel=2}}"
jxnc8610 2017-06-29
  • 打赏
  • 举报
回复
引用 7 楼 duanzi_peng 的回复:
<TextBlock x:Name="tb" Width="100" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10" Text="{Binding FirstName}" FontSize="10" > </TextBlock> -》 <TextBlock Width="100" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10" Text="{Binding FirstName}" FontSize="10" > </TextBlock> <TextBlock Grid.Column="1" Text="{Binding Path= DataContext.FirstName, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ItemsControl},AncestorLevel=2}}" Margin="5" Width="40"> </TextBlock> -》 <TextBlock Grid.Column="1" Text="{Binding Text,ElementName=tb}" Margin="5" Width="40">
谢谢,你这种方法是可以的。但是为什么我用那种方法不行呢?还有其它方法吗?
exception92 2017-06-29
  • 打赏
  • 举报
回复
<TextBlock x:Name="tb" Width="100" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10" Text="{Binding FirstName}" FontSize="10" > </TextBlock> -》 <TextBlock Width="100" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10" Text="{Binding FirstName}" FontSize="10" > </TextBlock> <TextBlock Grid.Column="1" Text="{Binding Path= DataContext.FirstName, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ItemsControl},AncestorLevel=2}}" Margin="5" Width="40"> </TextBlock> -》 <TextBlock Grid.Column="1" Text="{Binding Text,ElementName=tb}" Margin="5" Width="40">
jxnc8610 2017-06-29
  • 打赏
  • 举报
回复
 <ItemsControl Grid.Row="1" x:Name="PMItmsControl" VerticalAlignment="Top" ItemsSource="{Binding FirstEntityCollection}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <VirtualizingStackPanel Orientation="Vertical"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Border CornerRadius="5" BorderBrush="YellowGreen" BorderThickness="1" Margin="5">
                        <Grid Width="auto" Height="100" VerticalAlignment="Top">
                            <Grid.RowDefinitions>
                                <RowDefinition/>
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="60*"/>
                                <ColumnDefinition Width="40*"/>
                            </Grid.ColumnDefinitions>
                            <TextBlock Width="100" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10" Text="{Binding FirstName}" FontSize="10" >
                            </TextBlock>
                            <ItemsControl ItemsSource="{Binding SecondEntityCollection}" Grid.Column="1" VerticalAlignment="Top">
                                <ItemsControl.ItemsPanel>
                                    <ItemsPanelTemplate>
                                        <VirtualizingStackPanel Orientation="Vertical"/>
                                    </ItemsPanelTemplate>
                                </ItemsControl.ItemsPanel>
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <Grid>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="50*"/>
                                                <ColumnDefinition Width="50*"/>
                                            </Grid.ColumnDefinitions>
                                            <TextBlock Text="{Binding SecondName}" Margin="5"  Foreground="White" />
                                            <TextBlock Grid.Column="1" Text="{Binding Path= DataContext.FirstName, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ItemsControl},AncestorLevel=2}}" Margin="5" Width="40">
                                            </TextBlock>
                                        </Grid>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
                        </Grid>
                    </Border>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
jxnc8610 2017-06-29
  • 打赏
  • 举报
回复
1 <ItemsControl Grid.Row="1" x:Name="PMItmsControl" VerticalAlignment="Top" ItemsSource="{Binding FirstEntityCollection}"> 2 <ItemsControl.ItemsPanel> 3 <ItemsPanelTemplate> 4 <VirtualizingStackPanel Orientation="Vertical"/> 5 </ItemsPanelTemplate> 6 </ItemsControl.ItemsPanel> 7 <ItemsControl.ItemTemplate> 8 <DataTemplate> 9 <Border CornerRadius="5" BorderBrush="YellowGreen" BorderThickness="1" Margin="5"> 10 <Grid Width="auto" Height="100" VerticalAlignment="Top"> 11 <Grid.RowDefinitions> 12 <RowDefinition/> 13 </Grid.RowDefinitions> 14 <Grid.ColumnDefinitions> 15 <ColumnDefinition Width="60*"/> 16 <ColumnDefinition Width="40*"/> 17 </Grid.ColumnDefinitions> 18 <TextBlock Width="100" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10" Text="{Binding FirstName}" FontSize="10" > 19 </TextBlock> 20 <ItemsControl ItemsSource="{Binding SecondEntityCollection}" Grid.Column="1" VerticalAlignment="Top"> 21 <ItemsControl.ItemsPanel> 22 <ItemsPanelTemplate> 23 <VirtualizingStackPanel Orientation="Vertical"/> 24 </ItemsPanelTemplate> 25 </ItemsControl.ItemsPanel> 26 <ItemsControl.ItemTemplate> 27 <DataTemplate> 28 <Grid> 29 <Grid.ColumnDefinitions> 30 <ColumnDefinition Width="50*"/> 31 <ColumnDefinition Width="50*"/> 32 </Grid.ColumnDefinitions> 33 <TextBlock Text="{Binding SecondName}" Margin="5" Foreground="White" /> 34 <TextBlock Grid.Column="1" Text="{Binding Path= DataContext.FirstName, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ItemsControl},AncestorLevel=2}}" Margin="5" Width="40"> 35 </TextBlock> 36 </Grid> 37 </DataTemplate> 38 </ItemsControl.ItemTemplate> 39 </ItemsControl> 40 </Grid> 41 </Border> 42 </DataTemplate> 43 </ItemsControl.ItemTemplate> 44 </ItemsControl>
jxnc8610 2017-06-29
  • 打赏
  • 举报
回复
引用 3 楼 duanzi_peng 的回复:
[quote=引用 2 楼 jxnc8610 的回复:] [quote=引用 1 楼 duanzi_peng 的回复:] 首先ItemsSource 接收的是一个集合,不是一个对象。
<ItemsControl Grid.Row="1" x:Name="PMItmsControl" VerticalAlignment="Top" ItemsSource="{Binding FirstEntity}"> 这句我写错了,应该是FirstEntityCollection public ObservableCollection<FirstEntity> ItemsCollection { get;set; }[/quote] ItemsSource="{Binding SecondEntity}" SecondEntity 也要是个集合。[/quote] 笔误,输入错了。 public class FirstEntity { public string FirstName { get; set; } public ObservableCollection<SecondEntity> SecondEntityCollection { get; set; } } public class SecondEntity { public string SecondName { get; set; } }
exception92 2017-06-29
  • 打赏
  • 举报
回复
引用 2 楼 jxnc8610 的回复:
[quote=引用 1 楼 duanzi_peng 的回复:] 首先ItemsSource 接收的是一个集合,不是一个对象。
<ItemsControl Grid.Row="1" x:Name="PMItmsControl" VerticalAlignment="Top" ItemsSource="{Binding FirstEntity}"> 这句我写错了,应该是FirstEntityCollection public ObservableCollection<FirstEntity> ItemsCollection { get;set; }[/quote] ItemsSource="{Binding SecondEntity}" SecondEntity 也要是个集合。
jxnc8610 2017-06-29
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
首先ItemsSource 接收的是一个集合,不是一个对象。
<ItemsControl Grid.Row="1" x:Name="PMItmsControl" VerticalAlignment="Top" ItemsSource="{Binding FirstEntity}"> 这句我写错了,应该是FirstEntityCollection public ObservableCollection<FirstEntity> ItemsCollection { get;set; }
exception92 2017-06-29
  • 打赏
  • 举报
回复
首先ItemsSource 接收的是一个集合,不是一个对象。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧