在使用MVVM的ItemsControl中,组合框绑定不起作用

本文关键字:组合 绑定 不起作用 ItemsControl MVVM | 更新日期: 2023-09-27 18:03:41

我在ItemsControl中有一个ComboBox。我使用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
    .
    .
    .
    }

在使用MVVM的ItemsControl中,组合框绑定不起作用

问题是您试图访问UserList作为窗口的属性,而不是窗口的DataContext

修改ItemsSource:

<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor
                          AncestorType=Window}, Path=DataContext.UserList}" ... />
当你遇到绑定问题时,我建议你总是在Output窗口中查看,你可能会看到这样的内容:

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