在我的MVVM應用程序中,我有一個文本框和一個組合框。WPF用MVVM更改ComboBox用戶選擇和編程焦點
用戶在文本框和組合框下拉框中輸入數值(在文本框輸入時),用戶從組合框中選擇一個級別(他不能自己打開組合框)。
我想檢查兩個輸入並相應地更改組合框。
例如,如果用戶設定爲1200.5毫伏我會改變文本框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>
視圖模型:
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;
}
你有什麼試過?它在哪裏失敗?你寫了一個視圖模型嗎?如果不是,你的第一步是寫一個。你需要幫助嗎? –
* SelectionChanged *是一個不是值的事件 – Jim
我已將我的代碼添加到問題中。 – dov