2013-03-13 54 views
0

我有一个ComboBoxItemsControl。我使用WPF和MVVM,我有问题想弄清楚绑定到ComboBox,有人会帮我一个这个。 XAML和VM如下:Combobox绑定不能在ItemsControl中使用MVVM

<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> 

视图模型:

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 

    . 
    . 
    . 
    } 
+2

...等待XAML ... – Dan 2013-03-13 20:31:42

+0

为您解决,你只需要在代码和单词之间换行。 – 2013-03-13 20:45:59

+0

非常感谢,鲍勃 – user2167121 2013-03-13 21:00:17

回答

1

的问题是,你想,而不是窗口的的DataContext的属性来访问UserList作为窗口的属性, ...

修改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='')'.

+1

非常感谢! BlachShma,它确实有效,问题是我在DisplayMemberPath中输入了错误的名称。 – user2167121 2013-03-13 21:08:35