2013-07-26 136 views
1

我在我的應用程序中使用了許多ComboBox,並且所有這些工作都沒有任何問題。但是,我現在找不到問題了。我已將SelectedValuePath設置爲「標記」屬性。但更改組合框選定項目後屬性不會更新。我已經閱讀過其他StackOverflow問題,但無所謂幫助。Silverlight ComboBox SelectedValue TwoWay綁定不起作用

這是XAML:

的xmlns:虛擬機= 「CLR的命名空間:SilverlightApplication1」

<UserControl.DataContext> 
    <vms:MainViewModel /> 
</UserControl.DataContext> 

<Grid x:Name="LayoutRoot" Background="White"> 
    <ComboBox Width="100" VerticalAlignment="Center" FontFamily="Segoe UI" 
     Height="30" Margin="0,5,0,0" HorizontalAlignment="Left" 
     SelectedValue="{Binding SelectedDifStatusComparer, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
     SelectedValuePath="Tag"> 
     <ComboBox.Items> 
      <ComboBoxItem Tag="H" >High</ComboBoxItem> 
      <ComboBoxItem Tag="L" >Low</ComboBoxItem> 
      <ComboBoxItem Tag="E" >Equal</ComboBoxItem> 
     </ComboBox.Items> 
    </ComboBox> 
</Grid> 

這裏是視圖模型:

public class MainViewModel : INotifyPropertyChanged 
    { 
     public event PropertyChangedEventHandler PropertyChanged; 
     private void OnPropertyChanged(string propertyName) 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
      } 
     } 

     private string _selectedDifStatusComparer = ""; 
     private string SelectedDifStatusComparer 
     { 
      get { return _selectedDifStatusComparer; } 
      set 
      { 
       _selectedDifStatusComparer = value; 
       MessageBox.Show(_selectedDifStatusComparer); 
       OnPropertyChanged("SelectedDifStatusComparer"); 
      } 
     } 

     public MainViewModel() 
     { 
      SelectedDifStatusComparer = "E"; // It is working, the MessageBox is apperaing 
     } 
    } 
+0

請檢查你的輸出窗口綁定錯誤或使用史努比在運行時檢查你的綁定 – blindmeis

+0

@blindmeis它的工作,我只是忘了讓公共財產。 –

回答

1

你的財產私人的。將其更改爲公開,它應該可以工作。

+2

謝謝。我不能承認這一點。 :)看來,我累了。 –

2

你的財產是私人的。將其更改爲公開,它應該可以工作。

public class MainViewModel : INotifyPropertyChanged 
     { 
      public event PropertyChangedEventHandler PropertyChanged; 
      private void OnPropertyChanged(string propertyName) 
      { 
       if (PropertyChanged != null) 
       { 
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
       } 
      } 

      private string _selectedDifStatusComparer = ""; 
      public string SelectedDifStatusComparer 
      { 
       get { return _selectedDifStatusComparer; } 
       set 
       { 
        _selectedDifStatusComparer = value; 
        MessageBox.Show(_selectedDifStatusComparer); 
        OnPropertyChanged("SelectedDifStatusComparer"); 
       } 
      } 

      public MainViewModel() 
      { 
       SelectedDifStatusComparer = "E"; // It is working, the MessageBox is apperaing 
      } 
     } 
+1

謝謝。但是我6天前已經接受了另一個答案:) –

相關問題