2011-01-11 156 views
2

我總是被這些ComboBoxes完全運行。我想我理解他們,但似乎我不知道。ComboBox雙向綁定不起作用

我不能給一個對象一個父母。所以我有這個子對象,它有一個父值的ID,我有一個父項的集合。

我從ComboBox中選擇Parent,如果我理解正確,它的ID屬性應該綁定到Child的ParentId屬性。這看起來很好,當我選擇它的財產結束。模板已更改,並且顯示爲文本塊,一切正常。當模板突然回到組合框類型時,它是空的。它不應該在集合中找到Id對應於ParentId的可比項目嗎?

下面是代碼:

家長

public class Parent 
{ 
    private string _id; 
    public string Id 
    { 
     get 
     { 
      return _id; 
     } 
     set 
     { 
      _id = value; 
      OnPropertyChanged("Id"); 
     } 
    } 

    private string _name; 
    public string Name 
    { 
     get 
     { 
      return _name; 
     } 
     set 
     { 
      _name = value; 
      OnPropertyChanged("Name"); 
     } 
    } 
} 

兒童

public class RulesMainClassViewModel : ViewModelBase 
{ 
    private string _id; 
    public string Id 
    { 
     get 
     { 
      return _id; 
     } 
     set 
     { 
      _id = value; 
      OnPropertyChanged("Id"); 
     } 
    } 

     private string _parentId; 
    public string ParentId 
    { 
     get 
     { 
      return _parentId; 
     } 
     set 
     { 
      _parentId = value; 
      OnPropertyChanged("ParentId"); 
     } 
    } 

    private string _name; 
    public string Name 
    { 
     get 
     { 
      return _name; 
     } 
     set 
     { 
      _name = value; 
      OnPropertyChanged("Name"); 
     } 
    } 
} 

XAML組合框

<ComboBox DisplayMemberPath="Name" SelectedValue="{Binding Path=ParentId, Mode=TwoWay}" 
SelectedValuePath="Id" ItemsSource="{Binding Path=ParentCollection}" /> 
+0

這是WPF中的錯誤它稱爲級聯組合框的問題,如果你仔細注意,當itemssource發生變化時,不幸的是,組合框將SelectedIndex設置爲-1,這會導致SelectedValue清除並鬆開其綁定。 – 2011-01-11 19:53:06

+0

@Akash就是這樣嗎?這是在.Net中已經修復的東西4.我不相信ItemsSource在我的例子中已經改變。 – 2011-01-21 09:38:10

回答

0

不知道你完整的設置是什麼樣子(我可以真的不會告訴w帽子與你的代碼錯了),但我試圖模擬類似的東西有一個共同的用途,我做了一個ListView綁定到一個員工的集合NameOccupation。該ComboBox具有改變選定員工的Occupation的目的,它的XAML看起來像這樣:

<ComboBox ItemsSource="{Binding Occupations}" 
       SelectedValue="{Binding ElementName=lv,Path=SelectedItem.Occupation}" 
       SelectedValuePath="{Binding Occupation.Title}"> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Title}"/> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 

這似乎是工作。請注意,我SelectedValuePath是有約束力的,也許這是一個問題......


(類代碼:)

public class Employee : INotifyPropertyChanged 
{ 
    private string name; 
    public string Name 
    { 
     get { return name; } 
     set { name = value; 
     NotifyPropertyChanged("Name");} 
    } 

    private Occupation occupation; 
    public Occupation Occupation 
    { 
     get { return occupation; } 
     set { occupation = value; 
     NotifyPropertyChanged("Occupation");} 
    } 

    public Employee(string name, Occupation occupation) 
    { 
     this.name = name; 
     this.occupation = occupation; 
    } 

    #region INotifyPropertyChanged Members 
    ... 
    #endregion 
} 

public class Occupation : INotifyPropertyChanged 
{ 
    private string title; 
    public string Title 
    { 
     get { return title; } 
     set { title = value; 
     NotifyPropertyChanged("Title");} 
    } 

    public Occupation(string title) 
    { Title = title; } 

    #region INotifyPropertyChanged Members 
    ... 
    #endregion 
}