【问题标题】:WPF combobox - select the first item as defaultWPF 组合框 - 选择第一项作为默认值
【发布时间】: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属性。

标签: c# wpf xaml combobox selecteditem


【解决方案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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-27
      • 2016-11-17
      • 2017-10-31
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多