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;
}
在文本框中添加viewmodel属性的双向绑定
在属性的setter中(表示文本框值已更新)更改nodecategory和offsetvalues的值…引发
的属性更改应该可以
我在手机上打字,所以不能添加示例。
希望能有所帮助