2013-03-13 19 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