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 组合框 - 选择第一项作为默认值的主要内容,如果未能解决你的问题,请参考以下文章

使用 formbuilder 在组合框中选择默认值

组合框中的默认选择列表值 - LWC

未选择任何内容时将默认值保存在组合框中c#

添加“---选择”作为第一项在组合框的窗户形式?

选择项目后将多列组合框的值设置为所有列?

vuejs 下拉列表怎样默认选中