2016-11-06 38 views
0

私のMVVMアプリケーションでは、私はテキストボックスとコンボボックスを持っています。WPFの変更ComboBoxのユーザー選択とフォーカスはプログラムによってMVVMで

ユーザーはテキストボックスに数値を入力し、コンボボックスはテキストボックス入力時にドロップダウンし、ユーザーはコンボボックスからレベルを選択します(自分でコンボボックスを開くことはできません)。

両方の入力をチェックし、それに応じてコンボボックスを変更したいと思います。例えば

ユーザーが1200.5 mVのにテキストボックスを設定している場合、私はV.

に1.0にテキストボックスやコンボボックスを変更するでしょうに

質問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

何を試しましたか?それはどこで失敗したのですか?あなたはビューモデルを作ったのですか?そうでなければ、あなたの最初のステップは1つを書くことです。あなたはそれに助けが必要ですか? –

+0

* SelectionChanged *は値ではないイベントです – Jim

+0

質問に自分のコードを追加しました。 – dov

答えて

0

プロパティのセッターでのviewmodel

内のプロパティに結合する2つの方法を追加(更新済みテキストボックスの値を意味する)変化nodecategoryとoffsetvaluesの値...両方のプロパティの変更を発生させる

これは動作するはずです

私は携帯電話から入力しているので、例を追加できません。

希望します。

+0

問題を解決できませんでした。 サンプルコードを取得する機会はありますか? 私のコードを更新します。 – dov

+0

こんにちは@Satyajit Mohanty、 私はまだ私のコードでは困難を抱えています。 私のためにサンプルコードを追加することができます。ありがとう。 – dov

関連する問題