我在uwp中有一个listview,以及一个声明pataient_List和selected_patient的视图模型。我的listview显示itemsource但我不知道为什么我的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>
viewmodel是
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; }
答案 0 :(得分:1)
一个原因可能是所选项目必须是pataient_List
。
另一个原因可能是因为您在视图模型的构造函数中设置selected_patient
,这肯定是在您将视图模型绑定到视图之前。因此,在将视图模型绑定到视图之后,为什么不尝试设置selected_patient
。
答案 1 :(得分:1)
忘记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;
}
}
答案 2 :(得分:0)
我用这个答案来解决问题。
public override bool Equals(object obj)
{
if (this.name_to_show_menu == (obj as patient).name_to_show_menu)
return true;
else
return false;
}