提问者:小点点

wpf combobox从itemsSource默认选择


我的WPF应用程序中有一个ComboBox,我在其中显示项目列表。大多数情况下,第一个项目是项目资源列表中的正确选择,只有在个人请求时,才能更改项目。现在,“我的”组合框加载列表,但从不显示所选项目的第一个项目。有人能帮我吗。这是我的代码。

XAML:

<ComboBox Name="cbxShipTo" TabIndex="0" IsTextSearchEnabled="True" ToolTip="Ship To is a Required Field" MinWidth="200" SelectedIndex="0" IsSynchronizedWithCurrentItem="True" 
IsEditable="False" DisplayMemberPath="ShipToCountyState" SelectedValuePath="ShipToValue">
<ComboBox.SelectedValue>
    <Binding Path="ShipToQAD" Mode="TwoWay">
        <Binding.ValidationRules>
            <common:RequiredValidationRule ErrorMessage="Ship To is a Required Field" />
            <ExceptionValidationRule></ExceptionValidationRule>
        </Binding.ValidationRules>
    </Binding>
</ComboBox.SelectedValue>

代码隐藏:

cbxShipTo.ItemsSource = dbLookupService.GetShipToByCustomer(_inspectionListItems[0].CompanyID);
cbxShipTo.SelectedItem = cbxShipTo.Items.GetItemAt(0);

我在 itemsSource 中有值,已选择的 itme 也有一个值,但永远不会显示在屏幕上。

感谢任何帮助。


共1个答案

匿名用户

我通常这样做的方法是在 ViewModel 中保留对当前选定项的引用。(无论如何,您可能都应该这样做,因为您不应该查询 UI 对象本身来找出用户的选择。将“您的选定项”初始化为您希望显示为已选中项的项目。

public List<YourType> YourItems { get; set; }
public YourType SelectedItem = YourItems[index];

然后将SelectedItem绑定到YourItems属性。

<ComboBox ... SelectedItem={Binding YourSelectedItem, Mode=TwoWay} ... />

每当用户在组合框中更改其选择时,您的选定项属性将自动保持最新。

您不应该需要使用除选择项目之外的任何其他东西。