WPF 组合框 - 选择第一项作为默认值
Posted
技术标签:
【中文标题】WPF 组合框 - 选择第一项作为默认值【英文标题】:WPF combobox - select the first item as default 【发布时间】:2022-01-14 04:45:44 【问题描述】:我正在寻找将组合框中的第一项设置为默认值的可能性。
我对组合框有自己的看法 (XAML):
<ComboBox ItemsSource="Binding SiteScripts, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay"
SelectedValue="Binding SelectedSiteScriptId"
SelectedIndex="0" SelectedValuePath="Id"
DisplayMemberPath="Name" Background="AliceBlue"
Margin="5,10,10,540" Width="100" Height="50"/>
我从组合框的ItemsSource
属性中的视图模型绑定到我的列表,并且我的SelectedValue
绑定到ID
属性项:
public List<SiteCreateMachineScripts> SiteScripts
get return _siteScripts;
set
_siteScripts = value;
NotifyOfPropertyChange();
public int SelectedSiteScriptId
get return _selectedSiteScriptId;
set
_selectedSiteScriptId = value;
NotifyOfPropertyChange();
我已经尝试设置SelectedIndex = 0
,但没有成功
感谢您的建议:)
【问题讨论】:
与其改变控件属性,不如改变它绑定的viewmodel属性。 【参考方案1】:正如评论所说,您应该在 ViewModel 中做得更好。
从技术上讲,您可以使用样式和Load
事件来设置SelectedIndex=0
,此时Binding
应该已经完成了 ViewModel 的设置值,您可以设置新值:
<ComboBox ItemsSource="Binding SiteScripts, UpdateSourceTrigger=PropertyChanged"
SelectedValue="Binding SelectedSiteScriptId"
SelectedValuePath="Id"
DisplayMemberPath="Name" Background="AliceBlue"
Margin="5,10,10,540" Width="100" Height="50"/>
<ComboBox.Style>
<Style TargetType="x:Type ComboBox">
<Style.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<Int32Animation Storyboard.TargetProperty="SelectedIndex" To="0"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>
【讨论】:
【参考方案2】:默认选择常规处理
public class ViewModel
public List<SiteCreateMachineScripts> SiteScripts
get return _siteScripts;
set
_siteScripts = value;
NotifyOfPropertyChange();
public int SelectedSiteScriptId
get return _selectedSiteScriptId;
set
_selectedSiteScriptId = value;
NotifyOfPropertyChange();
public ViewModel()
SiteScripts = GetList(); // init list
SelectedSiteScriptId = SiteScripts.First().Id;
【讨论】:
以上是关于WPF 组合框 - 选择第一项作为默认值的主要内容,如果未能解决你的问题,请参考以下文章