Wpf上的ItemsSource ComboBox重置了吗?

时间:2010-01-21 17:02:17

标签: wpf combobox itemssource

我在xaml中设置了ComboBox并设置了ItemsSource绑定。当我运行项目时,ComboBox中没有显示任何内容。如果我使用snoop进行检查,则ItemsSource的{​​{1}}为空。

之前有人遇到过这个问题吗?

我检查了绑定错误,这是它显示的错误

ComboBox

System.Windows.Data Error: 39 : BindingExpression path error: 'WasteTypeData' property not found on 'object' ''JobItems' (HashCode=28494546)'. BindingExpression:Path=WasteTypeData; DataItem='JobItems' (HashCode=28494546); target element is 'ComboBox' (Name='CboWasteTypes'); target property is 'ItemsSource' (type 'IEnumerable')WasteTypeData的公共财产。

这就是我设置为ObservableCollection<WasteTypes>的绑定,如果我调试应用ComboBox,则会按预期填充WasteTypeData列表。

我无法弄清楚为什么它在对象WasteTypes上寻找WasteTypeData。在对象JobItems上找不到WasteTypeData属性。

JobItemsJobItemsData的公共财产。

我的xaml有一个ObservableCollection<JobItems>,其ListBox绑定设置为ItemsSource

JobItemsDataListBoxDataTemplate个和TextBoxComboBox。所有TextBox es都会正确显示其数据。

这是xaml,如果它有助于揭示正在发生的事情:

<UserControl
    x:Class="WorkItems.View.ViewJobItems"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:JobItemsViewModel="clr-namespace:WorkItems.ViewModel"
    Height="300" Width="500">
    <ListBox
        x:Name="LstJobItems"
        ItemsSource="{Binding JobItemsData}"
        VerticalAlignment="Stretch"
        HorizontalAlignment="Stretch">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>
                    <StackPanel
                        Grid.Column="0"
                        Margin="5">
                        <StackPanel
                            Orientation="Horizontal"
                            Margin="0,5,0,0">
                            <Label
                                Content="Customer Details"
                                FontWeight="Bold"
                                FontSize="24"></Label>
                        </StackPanel>
                        <StackPanel
                            Orientation="Horizontal">
                            <Line
                                StrokeThickness="3"></Line>
                        </StackPanel>
                        <StackPanel
                            Orientation="Horizontal"
                            Margin="0,5,0,0">
                            <Label
                                Content="Customer: "
                                FontWeight="Bold"
                                Width="110" />
                            <TextBox
                                Text="{Binding Customer, Mode=OneWay}"
                                Width="200" />
                        </StackPanel>
                        <StackPanel
                            Orientation="Horizontal"
                            Margin="0,5,0,0">
                            <Label
                                Content="Address: "
                                FontWeight="Bold"
                                Width="110" />
                            <TextBox
                                Text="{Binding Address1, Mode=OneWay}"
                                Width="200" />
                        </StackPanel>

                        <StackPanel
                            Grid.Column="1"
                            Margin="5">
                            <StackPanel
                                Orientation="Horizontal"
                                Margin="0,5,0,0">
                                <Label
                                    Content="Job Details"
                                    FontWeight="Bold"
                                    FontSize="24"></Label>
                            </StackPanel>
                            <StackPanel
                                Orientation="Horizontal">
                                <Line
                                    StrokeThickness="3"></Line>
                            </StackPanel>
                            <StackPanel
                                Orientation="Horizontal"
                                Margin="0,5,0,0">
                                <Label
                                    Content="Date: "
                                    FontWeight="Bold"
                                    Width="110" />
                                <TextBox
                                    Text="{Binding JobDate, Mode=OneWay}"
                                    Width="200" />
                            </StackPanel>
                            <StackPanel
                                Orientation="Horizontal"
                                Margin="0,5,0,0">
                                <Label
                                    Content="Waste Type: "
                                    FontWeight="Bold"
                                    Width="110" />
                                <ComboBox
                                    x:Name="CboWasteTypes"
                                    IsEditable="False"
                                    ItemsSource="{Binding Path=WasteTypeData}"
                                    DisplayMemberPath="WasteType"
                                    SelectedValuePath="WasteTypeID"
                                    SelectedValue="{Binding WasteTypeID}"
                                    Width="200" />
                            </StackPanel>
                            <StackPanel
                                Orientation="Horizontal"
                                Margin="0,5,0,0">
                                <Label
                                    Content="Status: "
                                    FontWeight="Bold"
                                    Width="110" />
                                <TextBox
                                    Text="{Binding Status, Mode=OneWay}"
                                    Width="200" />
                            </StackPanel>
                        </StackPanel>
                    </StackPanel>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</UserControl>

由于 保罗

2 个答案:

答案 0 :(得分:1)

检查“输出”窗口是否存在任何绑定错误。您可能拼写错误或未正确设置DataContext。

答案 1 :(得分:1)

我认为它失败了,因为当你在组合框中使用{Binding Path=WasteTypeData}时,它希望在JobsItems中找到它作为属性而不是可观察集合,因为这是父控件(你的ListBox)绑定到的

在您的用户控件中添加WasteTypeData作为静态资源,然后将您的组合框绑定到该组合框,使用"{Binding Source={StaticResource..."

指定它
<UserControl
   ...
   xmlns:local="WorkItems"
   ...
   Height="300" Width="500">
<UserControl.Resources>
   <local:WasteTypeData x:Key="WasteTypeData"/>
</UserControl.Resources>
..
<ComboBox
   x:Name="CboWasteTypes"
   IsEditable="False"
   ItemsSource="{Binding Source={StaticResource WasteTypeData}}"
   DisplayMemberPath="WasteType"
   SelectedValuePath="WasteTypeID"
   SelectedValue="{Binding WasteTypeID}"
   Width="200" />

看看是否有帮助!