2011-03-28 127 views
0

另一個小問題。 我有一個對象列表框。我有一些文本框與列表框中選定的項目的一些屬性,我必須編輯它們.. 但我的問題是:當我選擇一個項目,並用一些文本填充文本框。他保存它,但如果我點擊另一個項目,我填寫的東西留在文本框中,我該如何解決?將文本框更新爲選定項目列表框

這是一個文本框的例子: 所以我想設置我的對象的最大時間..當我點擊列表框中的東西時,文本框變得可見。

<TextBox Height="23" Visibility="{Binding Path=Visible, Converter={StaticResource boolToVis},UpdateSourceTrigger=PropertyChanged}" Text="{Binding Path=MaxTime,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" HorizontalAlignment="Left" Margin="376,322,0,0" Name="textBox2" VerticalAlignment="Top" Width="120" /> 

這是我的列表框:

<ListBox SelectedItem="{Binding Path=SelectedQuestionDropList, UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" 
    DisplayMemberPath="Description" 
     dd:DragDrop.IsDragSource="True" 
     dd:DragDrop.IsDropTarget="True" Margin="0,201,0,204" Background="#CDC5CBC5" 
        dd:DragDrop.DropHandler="{Binding}" /> 

這是我的視圖模型:

public int MaxTime 
     { 
      get { return maxTime; } 
      set { maxTime = value; 
      OnPropertyChanged("MaxTime"); 
      this.examQuestion.MaxTime = value; 

      } 
     } 
+0

你有一些代碼嗎?你如何設置文本框的值?你是否使用綁定並將其DataContext設置爲您的列表框中的SelectedItem? – devdigital 2011-03-28 11:54:57

回答

0

你必須每次更新您在列表框中選擇一個項目時您MAXTIME屬性。否則在選擇列表框中的項目時,Textbox.Text值將不會更新。

編輯: 有很多方法可以做到這一點:)你的listbox selectedItem被綁定到SelectedQuestionDropList。所以只需添加

OnPropertyChanged("MaxTime"); 

給二傳手。此解決方案會導致您的MaxTime屬性與SelectedQuestionDropList所在的類位於同一個類中。 另一個簡單的方法是從你的列表框中使用SelectionChanged事件,並用你的類的MaxTime屬性調用一個方法(例如NotifyAll())。

+0

我該怎麼做? – Ruben 2011-03-28 12:09:28

0

也許,您需要更改UpdateSourceTrigger爲您TextBoxText屬性,並將其設置爲LostFocus,而不是PropertyChanged

<TextBox Height="23" Visibility="{Binding Path=Visible, Converter={StaticResource boolToVis},UpdateSourceTrigger=PropertyChanged}" Text="{Binding Path=MaxTime,UpdateSourceTrigger=LostFocus,Mode=TwoWay}" HorizontalAlignment="Left" Margin="376,322,0,0" Name="textBox2" VerticalAlignment="Top" Width="120" /> 

參見:UpdateSourceTrigger on MSDN

相關問題