如何在组合框中的数据触发器中获取项目源的值?
How to get the value of the item source in datatrigger in a combobox?
我有一个组合框,其中 itemsource 是 MyTpye 类型的集合。我的类型是这样的:
Class MyClass
{
long ID;
string Description;
decimal Value;
}
对于 DisplayMemberPath,我使用值 属性。问题是它是小数,而不是小数?所以在 ID 为 0 的情况下,该值也为 0。我想在这种情况下显示 0.
所以我尝试以这种方式使用数据触发器:
<ComboBox Name="myComboBox"
DisplayMemberPath="Value"
ItemsSource="{Biniding MyCollection}"
SelectedItem="{Binding Path=MySelectedItem}">
<ComboBox.Style>
<Style TargetType="ComboBox">
<Style.Triggers>
<DataTrigger Binding="{Binding ???, path=ID}" Value="0">
<Setter Property="DisplayMemberPath" Value="{x:Null}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>
问题是在数据触发器的绑定中,我不知道如何获取作为组合框项目源的集合项目,并且从该项目中,ID 属性.
谢谢。
在您的 DataTrigger
绑定路径中使用 SelectedItem.ID
。
<DataTrigger Binding="{Binding Path=SelectedItem.ID}" Value="0">
或者,您可以将另一个 属性 添加到 decimal?
类型的 MyClass
并将其用于 DisplayMemberPath。
public decimal? DisplayValue { get => ID == 0 ? default(decimal?) : Value; }
摆脱 DisplayMemberPath
并使用 ItemTemplate
显示 Value
属性 的值或其他内容:
<ComboBox Name="myComboBox"
ItemsSource="{Binding MyCollection}"
SelectedItem="{Binding Path=MySelectedItem}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="{Binding Value}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Value}" Value="0">
<Setter Property="Text" Value="..." />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
在上面的示例中,对于 Value
为 0
的任何项目,将显示“...”而不是“0”。
我有一个组合框,其中 itemsource 是 MyTpye 类型的集合。我的类型是这样的:
Class MyClass
{
long ID;
string Description;
decimal Value;
}
对于 DisplayMemberPath,我使用值 属性。问题是它是小数,而不是小数?所以在 ID 为 0 的情况下,该值也为 0。我想在这种情况下显示 0.
所以我尝试以这种方式使用数据触发器:
<ComboBox Name="myComboBox"
DisplayMemberPath="Value"
ItemsSource="{Biniding MyCollection}"
SelectedItem="{Binding Path=MySelectedItem}">
<ComboBox.Style>
<Style TargetType="ComboBox">
<Style.Triggers>
<DataTrigger Binding="{Binding ???, path=ID}" Value="0">
<Setter Property="DisplayMemberPath" Value="{x:Null}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>
问题是在数据触发器的绑定中,我不知道如何获取作为组合框项目源的集合项目,并且从该项目中,ID 属性.
谢谢。
在您的 DataTrigger
绑定路径中使用 SelectedItem.ID
。
<DataTrigger Binding="{Binding Path=SelectedItem.ID}" Value="0">
或者,您可以将另一个 属性 添加到 decimal?
类型的 MyClass
并将其用于 DisplayMemberPath。
public decimal? DisplayValue { get => ID == 0 ? default(decimal?) : Value; }
摆脱 DisplayMemberPath
并使用 ItemTemplate
显示 Value
属性 的值或其他内容:
<ComboBox Name="myComboBox"
ItemsSource="{Binding MyCollection}"
SelectedItem="{Binding Path=MySelectedItem}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="{Binding Value}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Value}" Value="0">
<Setter Property="Text" Value="..." />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
在上面的示例中,对于 Value
为 0
的任何项目,将显示“...”而不是“0”。