I know this question was answered a while ago but your problem is having the state value in the top level view and not the subview.
What you want: Top level view - don't reload the List
NameListRow - Show or hide based on gender
Solution
struct NameList: View {
		
		@ObservedObject fileprivate var global = GlobalSettings()
		
		@FetchRequest(
				entity: Name.entity(),
				sortDescriptors: [NSSortDescriptor(key: "name", ascending: true)]
		) var names: FetchedResults<Name>
				
		var body: some View {
								
				return NavigationView {
						
						VStack {
								
								Picker("Gender", selection: $global.gender) {
										Text(Gender.female.rawValue.uppercased())
												.tag(Gender.female)
										Text(Gender.male.rawValue.uppercased())
												.tag(Gender.male)
										Text(Gender.unisex.rawValue.uppercased())
												.tag(Gender.unisex)
								}
								.pickerStyle(SegmentedPickerStyle())
								.padding()
								
								List( names, id: \.self) { (item: Name) in
									 NameListRow(item: item)
								}
						}
						
				}		
		}	
}
struct NameListRow: View {
		@State var selectedGender = Defaults.gender
var item: Item
	 var body: some View {
Group {
if self.selectedGener == item.gender {
content 				
}
}
.onReceive(Defaults.publisher(for: \.gender)) { (gender) in
self.selectedGender = gender
}		
}
var content: some View {
*view logic*
}
}