C# 组合框绑定不';t使用MVVM在ItemsControl中工作
我在C# 组合框绑定不';t使用MVVM在ItemsControl中工作,c#,mvvm,C#,Mvvm,我在ItemsControl中有一个ComboBox。我使用WPF和MVVM,我无法确定绑定到ComboBox,有人能帮我一下吗。XAML和VM如下所示: <Window x:Class="OutageManagement.Views.MarketAssignmentsView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="htt
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>
视图模型:
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
.
.
.
}
公共类MarketAssignmentsViewModel:ViewModelBase
{
#区域数据
ObservableCollection\u用户列表;
可观察的收集——美国市场;
可观测收集(caMarket);;
#端区
#区域构造函数
公共市场分配VIEWMODEL()
{
GetUserList();
GetMarketAssignments();
}
#端区
#区域属性
公共ObservableCollection用户列表
{
获取{return\u userList;}
}
公开收集市场
{
获取{return\u usMarket;}
}
公共可观测收集市场
{
获取{return\u caMarket;}
}
#端区
.
.
.
}
问题是您试图将用户列表作为窗口的属性而不是窗口的DataContext属性来访问
修改ItemsSource
,如下所示:
<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor
AncestorType=Window}, Path=DataContext.UserList}" ... />
我建议在出现绑定问题时始终查看输出窗口,您可能会看到如下情况:
<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor
AncestorType=Window}, Path=DataContext.UserList}" ... />
System.Windows.Data错误:40:BindingExpression路径错误:“在”“对象”“MarketAssignmentsView'(Name='')上找不到UserList”属性。
…等待XAML…为您修复,您只需要在代码和单词之间换行。非常感谢!BlachShma,它确实有效,问题是我在DisplayMemberPath中输入了错误的名称。