Xaml ListView所选项目绑定不起作用

Xaml ListView所选项目绑定不起作用,xaml,listview,mvvm,selecteditem,Xaml,Listview,Mvvm,Selecteditem,我在uwp中有一个listview,还有一个视图模型,其中声明了pataient_列表和selected_patient。我的listview显示项目源,但我不知道为什么我的listview不显示所选项目 <ListView ItemsSource="{Binding pataient_List}" SelectedItem="{Binding selected_patient, Mode=TwoWay, UpdateSourceTrigger=Proper

我在uwp中有一个listview,还有一个视图模型,其中声明了pataient_列表和selected_patient。我的listview显示项目源,但我不知道为什么我的listview不显示所选项目

 <ListView   ItemsSource="{Binding pataient_List}"
             SelectedItem="{Binding selected_patient, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock  Text="{Binding name_to_show_menu, Mode=TwoWay}" />
                            </StackPanel>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
视图模型是

public class patient_view_model : notify_property_changed_base
    {
        public patient_view_model(patient  patient_param)
        {
            pataient_List = new ObservableCollection<patient>();
            load_patient(); // this function put patients in pataient_List
            selected_patient = patient_param;
        }

 public patient selected_patient
        {
            get { return _selected_patient; }
            set
            {
                if (_selected_patient != value)
                {
                    _selected_patient = value;
                    RasiePropertyChanged();
                }
            }
        }
public ObservableCollection<patient> pataient_List { set; get; }

一个原因可能是,所选项目必须是pataient_列表中的一个对象


另一个原因可能是因为您正在视图模型的构造函数中设置选定的患者,这肯定是在您将视图模型绑定到视图之前。因此,为什么不在将视图模型绑定到视图后尝试设置所选患者。

忘记ListView中的ItemTemplate

 <ListView   ItemsSource="{Binding pataient_List}" 
    SelectedItem="{Binding selected_patient, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Foreground="Black">            
</ListView>

我用这个答案解决了这个问题

public override bool Equals(object obj) 
 { 
 if (this.name_to_show_menu == (obj as patient).name_to_show_menu) 
    return true; 
 else  
    return false; 
 } 

您是否尝试在所选患者的setter中设置断点,并检查它是否在您从列表中选择项目时实际命中?@alessalessio是的,我设置了断点,really selected_patinet有值,当我从listview中选择一个新患者时,所选的_患者再次更改,但看不到RaiseProperty更改方法的方法实现。。。但是我想你需要通过PropertyName:RasiePropertyChangedselected_patient@alessalessio它的esist在我的代码公共事件PropertyChangedEventHandler PropertyChanged中;private void RasiePropertyChanged[CallerMemberName]string fielName={if PropertyChanged!=null{PropertyChangedthis,new PropertyChangedEventArgsFieldName;}}}感谢您的回答,但这并没有解决我的问题,我们在我的viewmodel中写入选定的患者=患者参数;我想在我的列表视图的selectedItem中显示这个patient_参数,但这并没有发生。我在WPF中创建了一个小项目,并复制粘贴您的代码。它不起作用了。我修改了我写给你的信,效果很好。所以,要么你的实际代码不同,要么问题在于其他方面亲爱的@alessalessio我在通用Windows平台的WinRT中编写了此代码,我编写了此代码及其工作,但我需要选定的项目。我的意思是,选定的对象不是string@nik,您能否将您的案例上传到某个存储库中,以便我查看它?public override bool equalobject obj{如果this.name_to_show_menu==obj as patient.name_to_show_menu返回true;否则返回false;}
public override bool Equals(object obj) 
 { 
 if (this.name_to_show_menu == (obj as patient).name_to_show_menu) 
    return true; 
 else  
    return false; 
 }