无法使用DataTrigger在组合框中设置SelectedValue

本文关键字:设置 SelectedValue 组合 DataTrigger | 更新日期: 2023-09-27 17:58:31

我有一个comboBox,它有一个数据触发器,可以根据VM中的.NET属性值设置其SelectedIndex。我的问题是,我无法让setter设置"选定索引"。

ItemSource基于枚举数组。窗口的DataContext是具有调制和带宽属性的VM。

我是WPF的新手,所以我肯定我没有正确理解绑定,但我正在努力!感谢您提前提供的帮助。

这是款式。

    <Style x:Key="BWCombBoxStyle" TargetType="{x:Type ComboBox}" BasedOn="{StaticResource {x:Type ComboBox}}">
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true">
                <Setter Property="ToolTip"
                        Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                        Path=(Validation.Errors).CurrentItem.ErrorContent}"/>
            </Trigger>
            <DataTrigger 
                Binding="{Binding Modulation}" Value="P25">
                <Setter Property="SelectedIndex" Value="2"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>

这是组合框:

   <ComboBox Name="bandwidth" 
             Height="Auto" Width="70"
             Style="{StaticResource BWCombBoxStyle}"
             ItemsSource="{Binding BandwidthOptions, Mode=OneWay, ValidatesOnDataErrors=true, NotifyOnValidationError=true, UpdateSourceTrigger=PropertyChanged}"
             SelectedValue="{Binding IFBandwidth, Mode=TwoWay, ValidatesOnDataErrors=True, 
             NotifyOnValidationError=True, UpdateSourceTrigger=PropertyChanged}"/>

以下是我的VM中的.Net属性:

    public TMod Modulation
    {
        get { return modulation_; }
        set { modulation_ = value; NotifyPropertyChanged("Modulation"); }
    }
    public Channel.TBnd IFBandwidth
    {
        get { return chan_.IFBandwidth; }
        set
        {
            chan_.IFBandwidth = value; 
            NotifyPropertyChanged("IFBandwidth"); 
        }
    }
    public Channel.TBnd[] BandwidthOptions
    {
        get
        {
            return (Channel.TBnd[])System.Enum.GetValues(typeof(Channel.TBnd));
        }
    }

以下是枚举:

    public enum TMod
    {
        FM = 0,
        AM = 1,
        P25 = 2,
        TRK = 3
    }
    public enum TBnd
    {
        Std = 0,
        Nar = 1,
        Wide = 2,
        XWide = 3
    }

无法使用DataTrigger在组合框中设置SelectedValue

更改组合框绑定以使用SelectedValue而不是SelectedPath。这将在值更改时正确设置IFBandwidth视图模型属性。

触发器的具体用途是什么?将"调制"属性更改为这样可能是更好的选择。。。

public TMod Modulation
{
    get { return modulation_; }
    set
    {
        modulation_ = value; 
        NotifyPropertyChanged("Modulation");
        if( modulation == TMod.P25 )
        {
            IFBandwith = TBand.Wide;
        }
    }
 }