2017-03-24 30 views
0

システムにあるすべてのシリアルポート名を保持するコンボボックスがあります。 アイテムをロードして選択するためのバインディングが正常に動作しているようです。問題は、リストを(リフレッシュボタンを介して)変更するアクションを実行したときに、コンボボックスが更新リストを反映するが、選択されたテキストが更新前のものではなくなった(選択された値が変更されたものではない) 。 空きスペースがあります。 [添付写真の比較を参照] テキストの別のバインディングを排他的に追加しようとしましたが、同じ結果が出ました。 何が間違っている可能性がありますか? XAMLコードC#WPF MVVMコンボボックスのテキスト値

<ComboBox x:Name="cbxPorts" ItemsSource="{Binding PortNames}" 
      Text="{Binding cbxPortTextContent, Mode=TwoWay}" 
      SelectedItem="{Binding SelectedComPort, Mode=TwoWay}" 
      HorizontalAlignment="Left" Margin="10,23,0,0" VerticalAlignment="Top" 
      Width="119"/> 

モデルコード

// Property for Com Port Selection 
    public String SelectedComPort 
    { 
     get { return selectedComPort; } 
     set 
     { 
      if (value != null) 
      { 
       selectedComPort = value; 
       Properties.Settings.Default.ComPort = selectedComPort; 
       Properties.Settings.Default.Save(); 
      } 
      else 
      { 

      } 
     } 
    } 
    public String CbxPortTextContent 
    { 
     get { return cbxPortTextContent; } 
     set 
     { 
      cbxPortTextContent = value; 
      OnPropertyChanged("CbxPortTextContent"); 
     } 
    } 

これは最初の使用可能なWPF MVVMプロジェクトです。 すべての助け/提案は高く評価されます

答えて

0

私の意見では、comboBoxの別のプロパティを使用することができます:DisplayMemberPath = "value" SelectedValuePath = "Key"。 exempleについては

:あなたのXAMLで

public class PortNames 
{ 
    public string value{get;set;} 
    public int key {get;set;} 
} 

ctor() 
{ 
    cbxPorts.ItemsSource = new List<PortNames>(); 
} 

<ComboBox x:Name="cbxPorts" ItemsSource="{Binding PortNames}"    
      SelectedItem="{Binding SelectedComPort, Mode=TwoWay}" 
HorizontalAlignment="Left" Margin="10,23,0,0" SelectedValuePath="Key" DisplayMemberPath="value" VerticalAlignment="Top" Width="119"/> 
+0

私はあなたがPORTNAMESコンストラクタでcbxPortsを参照することができますどのように表示されないのですか? 私はコントロールが直接アクセスできるとは思わなかった。 明確にすることはできますか? ctor() { cbxPorts.ItemsSource = new List (); } – user1094416

+0

これは、コントロールにバインドされているPortNamesプロパティです。 public ObservableCollection PortNames { get {return portNames; } を設定します。 { portNames = value; OnPropertyChanged( "PortNames"); } } – user1094416

関連する問題