首页 新闻 会员 周边

关于ItemsControl的绑定问题

0
悬赏园豆:20 [已解决问题] 解决于 2020-10-30 09:52

我想用ItemsControl来展示一个竖着排列的数据,就像stackpanel那样竖着展示
可我用ItemsSource绑定,没有任何展示
我用的是一个UserControl,在后台代码上用DataContext绑定了一个School,类里面有个属性是IList<Student>,我想用ItemsControl绑定的就是IList<Student>,展示是Student里面的NAME属性
大概界面上绑定是这样:

<DockPanel>
        <ScrollViewer Name="scrollViewer" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
            <Border Margin="20">
                <StackPanel Name="content">
                    <StackPanel ...>
                        <TextBlock  Text="学校名称"></TextBlock>
                        <TextBox ... Text="{Binding Name, Mode=TwoWay}"></TextBox>
                    </StackPanel>
                    <StackPanel Orientation="Horizontal" Width="450" Height="35">
                        <TextBlock Text="学校状态"></TextBlock>
                        <ComboBox ... ItemsSource="{Binding PlatformTypes}" SelectionChanged="PlatformType_SelectionChanged">
                            <ComboBox.ItemTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Converter={StaticResource platformConverter}}"></TextBlock>
                                </DataTemplate>
                            </ComboBox.ItemTemplate>
                        </ComboBox>
                    </StackPanel>
                    <StackPanel Orientation="Vertical" Width="450" x:Name="selectModelPanel">
                        <StackPanel Orientation="Horizontal" Width="450">
                            <TextBlock Width="80" TextAlignment="Right" 
                                       VerticalAlignment="Center" Text="学生名字列表"></TextBlock>
<!-- 关注点, start -->
                            <ItemsControl x:Name="studentList" ItemsSource="{Binding ModelList}">
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <Border>
                                            <TextBlock Text="{Binding NAME}"></TextBlock>
                                        </Border>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
<!-- 关注点, end -->
                        </StackPanel>
                    </StackPanel>
                    <Button ... Name="addstudent" Click="AddStudent_Click" Content="增加学生"></Button>
                    
                </StackPanel>
            </Border>
        </ScrollViewer>


    </DockPanel>
public class School{
    public IList<Student> Students {get;set;}
    public string Name  {get;set;}
...
}
public class Student{
    public string NAME  {get;set;}
    public Sex sex  {get;set;}
    public short level  {get;set;}
...
}

请问一下我该怎么绑定,ItemsControl应该怎么写
要么用ListBox也成,但ListBox我也绑不上QAQ
绑定菜鸟求助...

伊人为谁醉的主页 伊人为谁醉 | 菜鸟二级 | 园豆:203
提问于:2020-07-29 09:12
< >
分享
最佳答案
0
<ListBox ...x:Name="studentList" ItemsSource="{Binding ModelList}" >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding NAME}"></TextBlock>
        </DataTemplate>
     </ListBox.ItemTemplate>
</ListBox>

试试这个方法呢,只用ListBox但是挺丑的

收获园豆:20
养鼠的猫 | 菜鸟二级 |园豆:250 | 2020-07-29 14:43

可以是可以,但只能是重新打开这个界面,做编辑的时候有用,新增的时候就是不能显示,在我点击按钮新增我给School的StudentList的值赋值付好了,但界面就是一个空白的ListBox,好奇怪啊

伊人为谁醉 | 园豆:203 (菜鸟二级) | 2020-07-29 14:59
其他回答(3)
0

<ItemsControl x:Name="studentList" ItemsSource="{Binding ModelList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border>
<ListBox itemsource={binding nameof(类里面有个属性是IList<另一个类>)}>
<ListBox.ItemTemplate>

<TextBlock Text="{Binding NAME}"></TextBlock>
</ListBox.ItemTemplate>
</ListBox>

</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

猝不及防 | 园豆:2781 (老鸟四级) | 2020-07-29 09:40

不行啊,界面上ItemsControl那一块是空白的,我还忘记说了一点,我点击那个Button是弹出一个新的界面,在界面上选择了值之后,才在ItemsControl里面显示出来的,不知道这点是不是会有影响

支持(0) 反对(0) 伊人为谁醉 | 园豆:203 (菜鸟二级) | 2020-07-29 10:10

@伊人为谁醉:
你这描述的不太清楚,模模糊糊的

支持(0) 反对(0) 猝不及防 | 园豆:2781 (老鸟四级) | 2020-07-29 10:12

@猝不及防: 我修改了一下问题,描述有没有清楚一点

支持(0) 反对(0) 伊人为谁醉 | 园豆:203 (菜鸟二级) | 2020-07-29 10:18

@伊人为谁醉: 把viewmodel也贴出来

支持(0) 反对(0) 猝不及防 | 园豆:2781 (老鸟四级) | 2020-07-29 10:21

@猝不及防: viewmodel也差不多

支持(0) 反对(0) 伊人为谁醉 | 园豆:203 (菜鸟二级) | 2020-07-29 10:42
0

Listbox 和 Expander效果蛮好的

无限环 | 园豆:210 (菜鸟二级) | 2020-09-09 17:52
0

当ViewModel修改后,需要Notify界面刷新,两种方式:

  1. 实现IPropertyChanged接口,当集合改变后,NotifyPropertyChanged.
  2. 修改School入下:
    public class School{
    public ObservableCollection<Student> Students {get;} = new ObservableCollection<Student>();
    public string Name {get;set;}
    ...
    }
    如果都有这些,那确认下Notify的线程是否为UI线程。
yangtam | 园豆:369 (菜鸟二级) | 2020-10-28 21:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册