wpf 如何将枚举绑定到ListBox中TextBlock的Text属性

sc4hvdpw  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(217)

我无法成功地使DataTrigger用于绑定到枚举。
ListBox中的每一行都是"S",就像在默认Setter中一样
XAML:

<Window x:Class="BindToEnumTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:BindToEnumTest"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <ListBox Grid.Column="0" x:Name="LBMain" ItemsSource="{Binding}" ScrollViewer.VerticalScrollBarVisibility="Auto">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Grid.Column="0" x:Name="TxtType">
                        <TextBlock.Style>
                            <Style TargetType="TextBlock">
                                <Setter Property="Text" Value="S" />
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding Type}" Value="TypeEnum.User">
                                        <Setter Property="Text" Value="U"/>
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </TextBlock.Style>
                    </TextBlock>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>

代码:

namespace BindToEnumTest
{
    public enum TypeEnum { None, System, User }

    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public Collection<TypeEnum> TypeList = new() { TypeEnum.System, TypeEnum.User, TypeEnum.System, TypeEnum.User };

        public MainWindow()
        {
            InitializeComponent();

            LBMain.DataContext = TypeList;
        }
    }
}

我已尝试在DataTrigger中使用"TypeEnum.User"和"User"-没有帮助。
在TextBlock中使用Text ="{Binding}"会在ListBox中显示"User"和"System",因此它似乎正在获取数据。
如何更改此触发器以使其正常工作?

w8f9ii69

w8f9ii691#

TypeEnum示例没有Type属性,因此绑定不能指定属性路径:

<DataTrigger Binding="{Binding}" Value="{x:Static local:TypeEnum.User}">

或者使用内置的从字符串到枚举的类型转换:

<DataTrigger Binding="{Binding}" Value="User">

相关问题