C# 如何在WPF的ListView中填充ComboBox
由于C# 如何在WPF的ListView中填充ComboBox,c#,wpf,listview,combobox,C#,Wpf,Listview,Combobox,由于组合框位于单元格模板中,我无法访问它并设置其项目资源。 我在另一个类中有一个从MySql中提取数据并将其分配给类属性的方法。它在组合框外部列表视图中工作得非常好,只是在列表视图内部无法绑定它 WPF代码: <GridViewColumn Header="Distributor"> <GridViewColumn.CellTemplate> <DataTemplate> <ComboBox x:Name=
组合框
位于单元格模板
中,我无法访问它并设置其项目资源
。
我在另一个类中有一个从MySql中提取数据并将其分配给类属性的方法。它在组合框
外部列表视图
中工作得非常好,只是在列表视图
内部无法绑定它
WPF代码:
<GridViewColumn Header="Distributor">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox x:Name="_distributor"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
您好,请尝试下一步: Xaml代码
<ListView ItemsSource="{Binding Users}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate DataType="someBindingExampleSoHelpAttempt:UserModel">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"></ColumnDefinition>
<ColumnDefinition Width="200"></ColumnDefinition>
<ColumnDefinition Width="50"></ColumnDefinition>
<ColumnDefinition Width="50"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Text="{Binding Name, UpdateSourceTrigger=LostFocus, Mode=TwoWay}"/>
<TextBox Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Text="{Binding LastName, UpdateSourceTrigger=LostFocus, Mode=TwoWay}"/>
<ComboBox Grid.Column="2"
IsTextSearchEnabled="True"
IsTextSearchCaseSensitive="False"
StaysOpenOnEdit="True"
TextSearch.TextPath="DepartmentName"
ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type ListView}}, Path=DataContext.Departments}"
SelectedValue="{Binding Department}"
DisplayMemberPath="DepartmentName"
IsEditable="True"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"/>
<ComboBox Grid.Column="3"
IsTextSearchEnabled="True"
IsTextSearchCaseSensitive="False"
StaysOpenOnEdit="True"
IsEditable="True"
TextSearch.TextPath="OfficeName"
ItemsSource="{Binding OfficesCollection}"
SelectedValue="{Binding Office}"
DisplayMemberPath="OfficeName"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"/>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
</ListView>
查看模型和模型
public class MainViewModel:BaseObservableObject
{
private DepartmentModel _selectedDepartment;
private OfficeModel _selectedOffice;
public MainViewModel()
{
Dal = new DataLayer();
Users = new ObservableCollection<UserModel>();
Departments = new ObservableCollection<DepartmentModel>(Dal.GetAllDepartments());
InitUsersCollection();
}
private void InitUsersCollection()
{
if(Departments == null) return;
Departments.ToList().ForEach(model =>
{
model.Offices.ToList().ForEach(officeModel =>
{
if (officeModel.Users == null) return;
officeModel.Users.ToList().ForEach(userModel => Users.Add(userModel));
});
});
}
public ObservableCollection<UserModel> Users { get; set; }
public ObservableCollection<DepartmentModel> Departments { get; set; }
private DataLayer Dal { get; set; }
}
public class DataLayer
{
public List<DepartmentModel> GetAllDepartments()
{
//pull and map your collection sources using your DB service
//For example:
return new List<DepartmentModel>
{
new DepartmentModel
{
DepartmentId = 1,
DepartmentName = "A",
Offices = new ObservableCollection<OfficeModel>
{
new OfficeModel
{
DepartmentId = 1,
OfficeName = "AA",
Users = new ObservableCollection<UserModel>(new List<UserModel>
{
new UserModel {Name = "Avicenna", LastName = "Abu Ali Abdulloh Ibn-Sino"},
new UserModel {Name = "Omar", LastName = "Khayyam"},
new UserModel {Name = "RAMBAM", LastName = "Moshe ben Maimon"}
})
},
new OfficeModel
{
DepartmentId = 1,
OfficeName = "AB",
Users = new ObservableCollection<UserModel>(new List<UserModel>
{
new UserModel {Name = "Leo", LastName = "Tolstoi"},
new UserModel {Name = "Anton", LastName = "Chekhov"},
})},
}
},
new DepartmentModel
{
DepartmentId = 2,
DepartmentName = "B",
Offices = new ObservableCollection<OfficeModel>
{
new OfficeModel
{
DepartmentId = 2, OfficeName = "BA",
Users = new ObservableCollection<UserModel>(new List<UserModel>
{
new UserModel {Name = "B", LastName = "O"},
new UserModel {Name = "B", LastName = "N"},
}),
},
new OfficeModel
{
DepartmentId = 2, OfficeName = "BB",
Users = new ObservableCollection<UserModel>(new List<UserModel>
{
new UserModel {Name = "John", LastName = "Walker"},
new UserModel {Name = "Gregory", LastName = "Rasputin"},
}),
},
}
},
new DepartmentModel
{
DepartmentId = 3,
DepartmentName = "C",
Offices = new ObservableCollection<OfficeModel>
{
new OfficeModel {DepartmentId = 3, OfficeName = "CA"},
new OfficeModel {DepartmentId = 3, OfficeName = "CB"},
new OfficeModel {DepartmentId = 3, OfficeName = "CC"}
}
}
};
}
}
public class OfficeModel:BaseObservableObject
{
private int _departmentModel;
private string _officeName;
private DepartmentModel _department;
private ObservableCollection<UserModel> _users;
public int DepartmentId
{
get { return _departmentModel; }
set
{
_departmentModel = value;
OnPropertyChanged();
}
}
public DepartmentModel Department
{
get { return _department; }
set
{
_department = value;
OnPropertyChanged();
}
}
public string OfficeName
{
get { return _officeName; }
set
{
_officeName = value;
OnPropertyChanged();
}
}
public ObservableCollection<UserModel> Users
{
get { return _users; }
set
{
_users = value;
OnPropertyChanged(()=>Users);
}
}
}
public class DepartmentModel:BaseObservableObject
{
private string _departmentName;
public string DepartmentName
{
get { return _departmentName; }
set
{
_departmentName = value;
OnPropertyChanged();
}
}
public int DepartmentId { get; set; }
public ObservableCollection<OfficeModel> Offices { get; set; }
}
public class UserModel:BaseObservableObject
{
private string _name;
private string _lastName;
private DepartmentModel _department;
private OfficeModel _office;
public string Name
{
get { return _name; }
set
{
_name = value;
OnPropertyChanged();
}
}
public string LastName
{
get { return _lastName; }
set
{
_lastName = value;
OnPropertyChanged();
}
}
public DepartmentModel Department
{
get { return _department; }
set
{
_department = value;
OnPropertyChanged();
OnPropertyChanged(()=>OfficesCollection);
}
}
public ObservableCollection<OfficeModel> OfficesCollection
{
get { return Department.Offices; }
}
public OfficeModel Office
{
get { return _office; }
set
{
_office = value;
OnPropertyChanged();
}
}
}
public类MainViewModel:baseObserveObject
{
私人部门模式(你选择的部门);;
私人办公室模型(你选择的办公室);;
公共主视图模型()
{
Dal=新数据层();
用户=新的ObservableCollection();
Departments=新的observeCollection(Dal.GetAllDepartments());
InitUsersCollection();
}
私有void InitUsersCollection()
{
如果(部门==null)返回;
Departments.ToList().ForEach(模型=>
{
model.Offices.ToList().ForEach(officeModel=>
{
if(officeModel.Users==null)返回;
officeModel.Users.ToList().ForEach(userModel=>Users.Add(userModel));
});
});
}
公共ObservableCollection用户{get;set;}
公共可观察收集部门{get;set;}
专用数据层Dal{get;set;}
}
公共类数据层
{
公共列表GetAllDepartments()
{
//使用DB服务提取并映射收集源
//例如:
返回新列表
{
新部门模式
{
部门ID=1,
DepartmentName=“A”,
办公室=新的可观察收集
{
新办公模式
{
部门ID=1,
OfficeName=“AA”,
用户=新的ObservableCollection(新列表
{
新用户模型{Name=“Avicenna”,LastName=“Abu Ali Abdulloh Ibn Sino”},
新用户模型{Name=“Omar”,LastName=“Khayyam”},
新用户模型{Name=“RAMBAM”,LastName=“Moshe ben Maimon”}
})
},
新办公模式
{
部门ID=1,
OfficeName=“AB”,
用户=新的ObservableCollection(新列表
{
新用户模型{Name=“Leo”,LastName=“Tolstoi”},
新用户模型{Name=“Anton”,LastName=“Chekhov”},
})},
}
},
新部门模式
{
部门ID=2,
DepartmentName=“B”,
办公室=新的可观察收集
{
新办公模式
{
DepartmentId=2,OfficeName=“BA”,
用户=新的ObservableCollection(新列表
{
新用户模型{Name=“B”,LastName=“O”},
新用户模型{Name=“B”,LastName=“N”},
}),
},
新办公模式
{
部门ID=2,OfficeName=“BB”,
用户=新的ObservableCollection(新列表
{
新用户模型{Name=“John”,LastName=“Walker”},
新用户模型{Name=“Gregory”,LastName=“Rasputin”},
}),
},
}
},
新部门模式
{
部门ID=3,
DepartmentName=“C”,
办公室=新的可观察收集
{
新的OfficeModel{DepartmentId=3,OfficeName=“CA”},
新的OfficeModel{DepartmentId=3,OfficeName=“CB”},
新的OfficeModel{DepartmentId=3,OfficeName=“CC”}
}
}
};
}
}
公共类OfficeModel:BaseObserveObject
{
私人int_部门模型;
私有字符串_officeName;
私人部门模型部门;
私有可观察收集用户;
公共int部门ID
{
获取{return\u departmentModel;}
设置
{
_部门模型=价值;
OnPropertyChanged();
}
}
公共部门模范部门
{
获取{return\u department;}
设置
{
_部门=价值;
OnPropertyChanged();
}
}
公共字符串官方名称
{
获取{return\u officeName;}
设置
{
_officeName=值;
OnPropertyChanged();
}
}
公共可观测收集用户
{
获取{return\u users;}
设置
{
_用户=价值;
OnPropertyChanged(()=>用户);
}
}
}
公共类DepartmentModel:BaseObserveObject
{
私人stri
<!--This User Control Holds The ListView as one of it's Contents-->
<UserControl.DataContext>
<someBindingExampleSoHelpAttempt:MainViewModel/>
</UserControl.DataContext>