2013-07-12 63 views
0

見下INotifyPropertyChanged的問題與組合框

enter image description here

我CustomView窗口當我從下拉框中選擇項目,與該項目相關的客戶端會自動顯示在那裏。

在組合框的選擇改變的情況下,我做了這麼遠

private string client 
{ 
get 
{ 
return ClientText.Text; 
} 
set 
{ 
ClientText.Text = value; 
} 
} 

public Harvest_Project projectClass 
    { 
     set 
     { 
      ProjectText.Text = value.ToString(); 
      Harvest_Project proj = (Harvest_Project)ProjectText.Text; // shows error here. casting is not possible. What can I do here? 
      this.client = Globals._globalController.harvestManager.getClientEntriesThroughId(proj._client_id)._name; 
      PropertyChanged(this, new PropertyChangedEventArgs("client")); 
     } 
    } 

public int project 
{ 
get 
{ 
return int.Parse(ProjectText.Text); 
} 
set 
{ 
ProjectText.Text = value.ToString(); 
} 
} 

private void ProjectComboBoxChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (sender is ComboBoxItem) 
     { 
      ComboBoxItem item = (ComboBoxItem)sender; 
     } 
    } 

在XAML我用這樣的結合,

<ComboBox x:Name="ProjectText" SelectionChanged="ProjectComboBoxChanged" ItemsSource="{Binding Path=projectList}" SelectedValuePath="_id" DisplayMemberPath="_name" SelectedItem="{Binding ProjectComboBoxChanged, Mode=OneWayToSource}" Background="Yellow" BorderThickness="0" Width="66"/> 
+0

什麼問題? –

回答

0

在事件處理ProjectComboBoxChanged(object sender, SelectionChangedEventArgs e),發件人的類型是ComboBox而不是ComboBoxItem ,因此您的if聲明始終爲false。

e.AddedItems[0]會給你想要的ComboBoxItem。確保你先檢查計數。

此外,如果您只想設置Text,則不需要具有client屬性。

0

「客戶端」是一個屬性,它應該是公開的。 然後PropertyChanged應該在setter中引發,所以無論何時你改變客戶端,UI都會知道。

關於組合的,則selectedItem應綁定到一個屬性,而不是方法。該物業可能是「客戶」,但另一個物業可能更清晰。

在這個setter方法,你有自由來解決「客戶」屬性的新值。

而在去年,因爲你正在使用selectedItem屬性的綁定,我看不出有任何理由使用該事件的SelectionChanged。使用綁定或事件,而不是兩者。

希望它有幫助;)

+0

請參閱修改。建議我可以在顯示錯誤的地方做些什麼? – Dinesh