Combobox绑定在使用MVVM的ItemsControl中不起作用

时间:2013-03-13 20:30:08

标签: c# mvvm

我在ComboBox中有一个ItemsControl。我使用WPF和MVVM,我有问题找出绑定到ComboBox,有人会帮我这么做。 XAML和VM如下:

    <Window x:Class="OutageManagement.Views.MarketAssignmentsView"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            mc:Ignorable="d"
            Title="Market Selection"
            WindowStartupLocation="CenterOwner"
            Width="700" Height="850"
            DataContext="{Binding MarketAssignmentsVM, Source={StaticResource Locator}}" >
      <Grid>
          <ItemsControl ItemsSource="{Binding USMarket}">
              <ItemsControl.ItemTemplate>
                 <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition></ColumnDefinition>
                            <ColumnDefinition></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                        <Label Content="{Binding MarketName}" Height="28" 
                            HorizontalAlignment="Left" Name="lblUSMarketName"  
                            VerticalAlignment="Center" />
                        <ComboBox Grid.Column="1" Height="23" HorizontalAlignment="Left" 
                              Name="cbUSUsers" VerticalAlignment="Center" MinWidth="140"
                              ItemsSource="{Binding RelativeSource={RelativeSource 
                              AncestorType=Window}, Path=UserList}" 
                              DisplayMemberPath="UserName" 
                              SelectedValue="{Binding SelectedUserID}" 
                              SelectedValuePath="UserID"/>
                     </Grid>
                 </DataTemplate>
             </ItemsControl.ItemTemplate>
         </ItemsControl>
      </Grid>
     </Window>

ViewModel:

    public class MarketAssignmentsViewModel : ViewModelBase
    {


    #region Data
    ObservableCollection<NOCUserViewModel> _userList;
    ObservableCollection<MarketAssignmentViewModel> _usMarket;
    ObservableCollection<MarketAssignmentViewModel> _caMarket;
    #endregion 

    #region Constructor
    public MarketAssignmentsViewModel()
    {
        GetUserList();
        GetMarketAssignments();
    }
    #endregion 

    #region Properties

    public ObservableCollection<NOCUserViewModel> UserList
    {
        get { return _userList; }
    }
    public ObservableCollection<MarketAssignmentViewModel> USMarket
    {
        get { return _usMarket; }
    }

    public ObservableCollection<MarketAssignmentViewModel> CAMarket
    {
        get { return _caMarket; }
    }
    #endregion

    .
    .
    .
    }

1 个答案:

答案 0 :(得分:1)

问题是您尝试访问UserList作为Window的属性,而不是Window的 DataContext 的属性...

像这样修改ItemsSource

<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor
                          AncestorType=Window}, Path=DataContext.UserList}" ... />

我建议您在遇到绑定问题时始终查看输出窗口,您可能会看到类似这样的内容:

System.Windows.Data Error: 40 : BindingExpression path error: 'UserList' property not found on 'object' ''MarketAssignmentsView' (Name='')'.