2016-11-06 75 views
0

在我的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; 


} 
+0

你有什麼試過?它在哪裏失敗?你寫了一個視圖模型嗎?如果不是,你的第一步是寫一個。你需要幫助嗎? –

+0

* SelectionChanged *是一個不是值的事件 – Jim

+0

我已將我的代碼添加到問題中。 – dov

回答

0

在文本框添加2方式在視圖模型

在屬性的設置器結合到一個屬性(意味着文本框的值更新)改變nodecategory和offsetvalues的值...提高屬性更改

這應該工作

我從手機打字,所以不能添加示例。

希望這會有幫助

+0

我無法解決這個問題。 有沒有機會獲得示例代碼? 我會更新我的代碼。 – dov

+0

Hi @Satyajit Mohanty, 我的代碼仍然有問題。 任何機會,你可以爲我添加一個示例代碼。 謝謝。 – dov