ListView 选定的项目绑定不起作用

ListView selected Item binding not work

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

 <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_List 中的对象之一。

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

忘记 ListView 中的 ItemTemplate。

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

.NET 不知道您希望如何显示数据,因此它只是在每个对象上调用 ToString() 方法并使用它来表示项目。覆盖患者对象中的 ToString() 方法以显示您需要的内容。这是代码:

public class patient
    {
        public string name_to_show_menu;
        public override string ToString()
        {
            return this.name_to_show_menu;
        }
    }

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

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