WPF使用MVVM以编程方式更改ComboBox用户选择和焦点

本文关键字:用户 ComboBox 选择 焦点 方式更 使用 MVVM 编程 WPF | 更新日期: 2023-09-27 18:16:50

在我的MVVM应用程序,我有一个文本框和一个组合框。

用户在文本框和组合框下拉框中写一个数值(在文本框输入时),用户从组合框中选择一个级别(他不能自己打开组合框)

我想检查两个输入并相应地更改组合框。

例如,如果用户将文本框设置为1200.5 mV,我会将文本框更改为1.0,并将组合框更改为v。

问题1:

我如何改变组合框的SelectedValue编程,使用户可以看到新的值?

问题2:

我怎么能下拉组合框,但仍然保持焦点在文本框(即使我的鼠标光标是在组合框下拉)?从组合框中选择第一个选项后,我似乎失去了对文本框的关注。

谢谢。XAML:

<Grid >
    <StackPanel Orientation="Horizontal">
        <TextBox Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Height="25" Width="100" 

                 />

        <ComboBox 
            IsDropDownOpen="{Binding IsDropDownOpen, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
            ItemsSource="{Binding OffsetValues}"
            SelectedValue="{Binding NodeCategory, Mode=TwoWay}" 
            Height="25" Width="100" IsHitTestVisible="False" Background="AliceBlue">
            <ComboBox.Resources>
                <sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">0</sys:Double>
            </ComboBox.Resources> 
        </ComboBox>
    </StackPanel>

</Grid>

ViewModel:

class ViewModel : ViewModelBase
{

    private IList<string> offsetValues =  new List<string>() { "mV", "V" };
    public IList<string> OffsetValues
    {
        get
        {
            return offsetValues;
        }
        set
        {
            offsetValues = value;
        }
    }


    private bool isDropDownOpen;
    public bool IsDropDownOpen
    {
        get { return isDropDownOpen; }
        set
        {
            isDropDownOpen = value;
            OnPropertyChanged();
        }
    }

    private string _name;
    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
            OnPropertyChanged( "Name" );
            if( _name != "" )
            {
                isDropDownOpen = true;
                OnPropertyChanged( "IsDropDownOpen" );
            }
        }
    }


    private string _NodeCategory;
    public string NodeCategory
    {
        get
        {
            return _NodeCategory;
        }
        set
        {
            if( Convert.ToDouble( _name ) > 1000 )
            {
                _name = "1.0";
                OnPropertyChanged( "Name" );


                _NodeCategory = OffsetValues[1];

                OnPropertyChanged( "NodeCategory" );

            }
            else
            {

                _NodeCategory = value;
                OnPropertyChanged( "NodeCategory" );
            }

        }
    }


}

public class ViewModelBase : INotifyPropertyChanged
{
    protected virtual void OnPropertyChanged( [CallerMemberName]string propertyName = null )
    {
        PropertyChanged.Invoke( this, new PropertyChangedEventArgs( propertyName ) );
    }
    public event PropertyChangedEventHandler PropertyChanged;

}

WPF使用MVVM以编程方式更改ComboBox用户选择和焦点

在文本框中添加viewmodel属性的双向绑定

在属性的setter中(表示文本框值已更新)更改nodecategory和offsetvalues的值…引发

的属性更改

应该可以

我在手机上打字,所以不能添加示例。

希望能有所帮助