在 WPF 中,SelectedValue
和 SelectedItem
都是用于绑定控件(如 ComboBox
、ListBox
等)中选定项的属性,但它们有不同的用途和行为。以下是它们的区别和关联:
1. SelectedItem
-
类型 :
SelectedItem
是一个对象,表示控件中当前选定的项。 -
用法 :
SelectedItem
直接获取或设置当前选定项的整个对象。 -
典型场景 : 如果你需要获取选定项的整个数据对象(例如一个绑定的模型类实例),你会使用
SelectedItem
。示例:
xml<ComboBox x:Name="comboBox" ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" />
在这个示例中,
SelectedItem
将会绑定到视图模型中的SelectedItem
属性,该属性通常是绑定项集合中的一个完整对象。
2. SelectedValue
-
类型 :
SelectedValue
是一个值类型,可以是任何类型,如int
、string
或自定义类型。它表示控件中选定项的特定属性的值。 -
用法 :
SelectedValue
的值由控件中选定项的SelectedValuePath
属性确定。SelectedValuePath
用于指定选定项对象中的哪个属性将作为SelectedValue
返回。 -
典型场景 : 如果你只关心选定项的某个特定属性值,而不是整个对象,使用
SelectedValue
会更方便。示例:
xml<ComboBox x:Name="comboBox" ItemsSource="{Binding Items}" SelectedValue="{Binding SelectedValue}" SelectedValuePath="Id" />
在这个示例中,
SelectedValue
将绑定到视图模型中的SelectedValue
属性,并且SelectedValuePath="Id"
表示控件中选定项的Id
属性的值会被绑定到视图模型。
3. SelectedValue
和 SelectedItem
的关系
-
没有设置
SelectedValuePath
的情况:- 如果没有设置
SelectedValuePath
,SelectedValue
将默认返回SelectedItem
的值。换句话说,在这种情况下,SelectedValue
和SelectedItem
表现得是一样的,都会返回整个选定项对象。
示例:
xml<ComboBox x:Name="comboBox" ItemsSource="{Binding Items}" SelectedValue="{Binding SelectedValue}" />
在这个例子中,如果
SelectedValuePath
没有设置,SelectedValue
和SelectedItem
返回的值是相同的,即整个选定项对象。 - 如果没有设置
-
设置了
SelectedValuePath
的情况:- 如果设置了
SelectedValuePath
,SelectedValue
和SelectedItem
返回的值将不同。此时,SelectedValue
返回的是选定项对象中由SelectedValuePath
指定的属性的值,而SelectedItem
仍然返回整个对象。
示例:
xml<ComboBox x:Name="comboBox" ItemsSource="{Binding Items}" SelectedValue="{Binding SelectedValue}" SelectedValuePath="Id" />
在这种情况下,
SelectedItem
返回的是整个对象,而SelectedValue
仅返回Id
属性的值。 - 如果设置了
总结:
SelectedItem
用于获取或设置整个选定项的对象。SelectedValue
在没有设置SelectedValuePath
时,会与SelectedItem
返回相同的对象;但一旦设置了SelectedValuePath
,SelectedValue
返回的将是由SelectedValuePath
指定的属性的值,而不是整个对象。
这样你可以根据需要的数据类型,选择使用 SelectedItem
或 SelectedValue
。