C# 如何将一个组合框绑定到另一个组合框中选定的对象?

C# 如何将一个组合框绑定到另一个组合框中选定的对象?,c#,wpf,binding,C#,Wpf,Binding,我不熟悉数据绑定和WPF,因此如果我的问题是初步的,我很抱歉 让我用一个简单的例子来解释我的问题: 假设一家餐厅有三种比萨饼:迷你比萨饼、普通比萨饼和大比萨饼。 经理想根据订单价格给顾客一份小礼物 普通比萨饼的礼物是一个小钥匙链: class pizza_ordinary : pizza { Public List<string> Gifts { get { return new List<string&g

我不熟悉数据绑定和WPF,因此如果我的问题是初步的,我很抱歉

让我用一个简单的例子来解释我的问题:

假设一家餐厅有三种比萨饼:迷你比萨饼、普通比萨饼和大比萨饼。 经理想根据订单价格给顾客一份小礼物

普通比萨饼的礼物是一个小钥匙链:

class pizza_ordinary : pizza
{
    Public List<string> Gifts
    {
        get
        {
            return new List<string>()
            {
                "Small Keychain Blue",
                "Small Keychain Red"
            };
        }
    }
}
但是迷你比萨饼没有任何礼物,也没有礼品属性

所以在WPF界面中,我们有一个绑定到比萨饼列表的组合框

如何使第二个组合框绑定到第一个组合框中所选披萨对象的
Gifts
属性


当选择迷你比萨饼时,如何禁用第二个组合框?在ViewModel中,创建一个带有评估是否应启用该框的
get
ter的
bool
属性。e、 g.
return(SelectedItem.gives.Count>0)

例如:

在视图中,将第二个组合框的
IsEnabled
属性绑定到视图模型中的该属性

像这样:

<ComboBox x:Name="secondComboBox" ItemsSource="{Binding SelectedPizza.Gifts}"
          IsEnabled="{Binding IsSecondComboBoxEnabled}" >
... some pretty ComboBox item styling going on here ...
</ComboBox>
此外了解如何将值转换器与XAML结合使用。它们真的很有用

在本例中,您可能有一个“IsCollectionNotNullOrEmptyToBoolean”转换器,其名称有点不言自明

这意味着您也不需要设置任何额外的ViewModel属性,并且可以在代码的其他地方使用转换器真的建议您研究一下价值转换器


希望这有帮助

在ViewModel中,使用
get
ter创建一个
bool
属性,该属性用于评估是否应启用该框。e、 g.
return(SelectedItem.gives.Count>0)

例如:

在视图中,将第二个组合框的
IsEnabled
属性绑定到视图模型中的该属性

像这样:

<ComboBox x:Name="secondComboBox" ItemsSource="{Binding SelectedPizza.Gifts}"
          IsEnabled="{Binding IsSecondComboBoxEnabled}" >
... some pretty ComboBox item styling going on here ...
</ComboBox>
此外了解如何将值转换器与XAML结合使用。它们真的很有用

在本例中,您可能有一个“IsCollectionNotNullOrEmptyToBoolean”转换器,其名称有点不言自明

这意味着您也不需要设置任何额外的ViewModel属性,并且可以在代码的其他地方使用转换器真的建议您研究一下价值转换器


希望这有帮助

您可以使用DataTrigger。当礼品为空时,第二个组合框将被禁用

<ComboBox x:Name="PizzaCB" ItemsSource="{Binding ListPizza}">

</ComboBox>
<ComboBox x:Name="GiftCB" ItemsSource="{Binding ElementName=PizzaCB, Path=SelectedItem.Gifts}">
    <ComboBox.Style>
        <Style TargetType="ComboBox">
            <Setter Property="IsEnabled" Value="True"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=PizzaCB, Path=SelectedItem.Gifts}" Value="{x:Null}">
                    <Setter Property="IsEnabled" Value="False"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
</ComboBox> 

您可以使用DataTrigger。当礼品为空时,第二个组合框将被禁用

<ComboBox x:Name="PizzaCB" ItemsSource="{Binding ListPizza}">

</ComboBox>
<ComboBox x:Name="GiftCB" ItemsSource="{Binding ElementName=PizzaCB, Path=SelectedItem.Gifts}">
    <ComboBox.Style>
        <Style TargetType="ComboBox">
            <Setter Property="IsEnabled" Value="True"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=PizzaCB, Path=SelectedItem.Gifts}" Value="{x:Null}">
                    <Setter Property="IsEnabled" Value="False"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
</ComboBox> 

<ComboBox x:Name="PizzaCB" ItemsSource="{Binding ListPizza}">

</ComboBox>
<ComboBox x:Name="GiftCB" ItemsSource="{Binding ElementName=PizzaCB, Path=SelectedItem.Gifts}">
    <ComboBox.Style>
        <Style TargetType="ComboBox">
            <Setter Property="IsEnabled" Value="True"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=PizzaCB, Path=SelectedItem.Gifts}" Value="{x:Null}">
                    <Setter Property="IsEnabled" Value="False"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
</ComboBox>