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;
}
我在 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;
}