列表框复选框未绑定到其源

时间:2018-03-25 11:33:56

标签: c# vb.net mvvm data-binding listbox

我需要帮助绑定弹出框中列表框中的复选框列表。我的XAML代码如下

<Popup Name="popUser" Placement="Bottom" PlacementTarget="{Binding ElementName=BtnUserFilter}" StaysOpen="False" Height="100" VerticalAlignment="Top">
            <Border Background="White" BorderBrush="Gray" BorderThickness="1,1,1,1">
                <StackPanel Margin="5,5,5,15">
                    <StackPanel Orientation="Horizontal" Margin="0,0,0,20">
                        <Button Margin="0,0,0,0" Name="BtnSelectAll" Click="BtnSelectAll_Click">
                            <Button.Template>
                                <ControlTemplate>
                                    <TextBlock Text="Select All" Foreground="Blue" Cursor="Hand" />
                                </ControlTemplate>
                            </Button.Template>
                        </Button>

                        <Button Margin="10,0,0,0" Name="BtnUnselectAll" Click="BtnUnselectAll_Click">
                            <Button.Template>
                                <ControlTemplate>
                                    <TextBlock Text="Select None" Foreground="Blue" Cursor="Hand" />
                                </ControlTemplate>
                            </Button.Template>
                        </Button>
                    </StackPanel>
                    <ListBox x:Name="lstUser" BorderThickness="0" Height="100" ItemsSource="{Binding Userlists,  RelativeSource={RelativeSource AncestorType=local:MainWindow}}">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <CheckBox IsChecked="{Binding Path=IsChecked, UpdateSourceTrigger=PropertyChanged}"
                                          Content="{Binding Path=UserIL, UpdateSourceTrigger=PropertyChanged}" />
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>
                </StackPanel>
            </Border>
        </Popup>

列表框绑定到的viewmodel中的代码是

Dim test = (From c In Users Select New With {Key c.User}).Distinct
    Dim Cnt As Integer
    For Cnt = 0 To test.Count - 1
        UserLists.Add(New UserList(Of String) With {.IsChecked = True, .UserIL = test(Cnt).User})
    Next

代码填充UserList变量中的所有用户,但不会显示在ListBox中。我没有正确绑定复选框吗?想法?

1 个答案:

答案 0 :(得分:0)

确保UserLists是ObservableCollection,因为常规列表不会将对其内容所做的更改传播到UI。

此外,我怀疑你的xaml中有一个拼写错误,方法是将用户列表称为用户列表(注意区分大小写)

  

出于解决支持类型的目的,WPF XAML区分大小写   与CLR区分大小写的规则相同。对象元素,   必须通过使用指定属性元素和属性名称   通过名称与基础类型进行比较时的敏感外壳   装配,或类型的成员。