0

我有一个组合框,其中包含类别对象。

<ComboBox Name="cbxCategory" Grid.Row="0" Grid.Column="1" FontSize="14" SelectedValue="{Binding Category, Mode=TwoWay}" Style="{StaticResource RegularControlStyles}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <ComboBoxItem Content="{Binding CategoryName}" />
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

我有 DataContext 这是:

public class EventFilter
{
    public int CategoryId { get; set; }
    public int SubCategoryId { get; set; }
    public DateTime StartDate { get; set; }
    public int? Duration { get; set; }
    public string Address { get; set; }
}

除了两个组合框(类别和子类别)之外,所有字段都绑定得很好。

问题是组合框包含一个 Category 对象,而 EventFilter 包含它的 id。我可以做的一种解决方案就是更改属性:

public int CategoryId { get; set; }

至:

public int Category { get; set; }

但我不想那样做,我想持有身份证。那么我该怎么做呢?

我应该使用转换器吗?如果我将组合框的绑定更改为:

SelectedValue="{Binding CategoryId, Mode=TwoWay}"

它不能很好地工作,因为它包含类别。

有人能帮我吗?

非常感谢。

4

1 回答 1

0

您需要将 的属性设置为您的SelectedValuePath属性ComboBox的名称......在这种情况下,我猜您的Category班级上有一个名为“Id”的属性。然后,该SelectedValue属性将提供所选Category对象的“Id”属性的值。

您可以从MSDN 上的Selector.SelectedValuePath 属性页面了解更多信息。

您可能还需要或需要设置DisplayMemberPath属性...这定义了所选Category对象的哪个属性将显示在控件中。

您可以从MSDN 上的ItemsControl.DisplayMemberPath 属性页面了解更多信息。

<ComboBox Name="cbxCategory" Grid.Row="0" Grid.Column="1" FontSize="14" 
    SelectedValuePath="CategoryId" SelectedValue="{Binding EventFilterItems.CategoryId}" 
    DisplayMemberPath="CategoryName" Style="{StaticResource RegularControlStyles}" />

请注意,您需要将 的SelectedValue属性绑定ComboBoxCategoryId当前EventFilter对象的属性。

于 2013-08-20T15:12:14.440 回答