如何将组合框类别项绑定到它的categoryId

时间:2013-08-20 14:56:04

标签: wpf xaml

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

<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和SubCategory)之外,所有字段都绑定得很好。

问题是组合框保存了一个Category对象,而EventFilter保存了它的id。我能做的一个解决方案就是改变属性:

public int CategoryId { get; set; }

到:

public int Category { get; set; }

但我不想那样做,我想保留身份证。 那我该怎么办?

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

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

它不能正常工作,因为它包含类别。

有人可以帮助我吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

您需要将SelectedValuePath的{​​{1}}属性设置为您的媒体资源的名称...在这种情况下,我猜您在{{{}}上有一个名为'Id'的媒体资源{1}}课程。然后,ComboBox属性将提供所选Category对象的“Id”属性值。

您可以在MSDN的Selector.SelectedValuePath Property页面上找到更多信息。

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

您可以在MSDN的ItemsControl.DisplayMemberPath Property页面上找到更多信息。

DisplayMemberPath

请注意,您需要将Category的{​​{1}}属性绑定到当前<ComboBox Name="cbxCategory" Grid.Row="0" Grid.Column="1" FontSize="14" SelectedValuePath="CategoryId" SelectedValue="{Binding EventFilterItems.CategoryId}" DisplayMemberPath="CategoryName" Style="{StaticResource RegularControlStyles}" /> 对象的SelectedValue属性。