2012-04-02 121 views
0

我有一個列表框綁定到一個ObservableCollection,並在ListBox.ItemTemplate裏有一個綁定到另一個ObservableCollection的組合框。如何更新WPF中列表框中的組合框綁定?

我需要的是在保存ListBox數據後更新這些ComboBoxes。

這裏是我的XAML:

<ListBox Name="listBox" HorizontalContentAlignment="Stretch" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding KeyValues, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"> 
<ListBox.ItemTemplate> 
    <DataTemplate> 
     <Border BorderThickness="1" BorderBrush="Gray" CornerRadius="4" Margin="0,1,1,1" Background="#EEE"> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="50" /> 
        <ColumnDefinition Width="3*" /> 
        <ColumnDefinition Width="70" /> 
        <ColumnDefinition Width="2*" /> 
       </Grid.ColumnDefinitions> 
       <Label Grid.Column="1" Margin="0,1">Value</Label> 
       <TextBox Grid.Column="2" Margin="0,1" Text="{Binding Path=Value}" /> 
       <Label Grid.Column="3" Margin="0,1">Combo 1</Label> 
       <ComboBox Grid.Column="4" Margin="0,1" SelectedValue="{Binding Path=Combo1}" SelectedValuePath="Key" DisplayMemberPath="Value" ItemsSource="{Binding SelectableKeyValues, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" /> 
      </Grid> 
     </Border> 
    </DataTemplate> 
</ListBox.ItemTemplate> 

,並在這裏的C#代碼的特性:

public ObservableCollection<KeyValue> _KeyValues = null; 
public ObservableCollection<KeyValue> KeyValues 
{ 
    get 
    { 
     if (_KeyValues == null) 
     { 
      // _KeyValues = ... (Database call) 
     } 
     return _KeyValues; 
    } 
} 
public ObservableCollection<KeyValue> _SelectableKeyValues = null; 
public ObservableCollection<KeyValue> SelectableKeyValues 
{ 
    get 
    { 
     if (_SelectableKeyValues == null) 
     { 
      // _SelectableKeyValues = ... (Database call) 
     } 
     return _SelectableKeyValues; 
    } 
} 

一個調用的方法保存後:

public void RefreshData() 
{ 
    listBox.Items.Refresh(); 
    _SelectableKeyValues = null; 
} 

我也嘗試過了手動重新加載集合,但結果總是一樣的:

在ComboBox我從來沒有找到新的元素(我相信有)

我究竟做錯了什麼?

+0

只是一個快速的提示,設置Mode = TwoWay您的組合框項目源綁定 – michele 2012-04-02 13:07:07

+0

不起作用,因爲它是一個只讀屬性。 – p4bl0 2012-04-02 13:24:15

回答

3

一種方法是在您的UserControl(包含SelectableKeyValues定義的類)中實現INotifyPropertyChanged接口,並在RefreshData方法內使用「SelectableKeyValues」作爲事件參數構造函數參數引發PropertyChanged事件。 使用ObservableCollection不會幫助你在這種情況下,因爲你不改變集合,但取而代之。 讓我們知道,如果你需要代碼示例

+0

完美!謝謝,我不知道UserControl有一個「已處理」屬性changed – p4bl0 2012-04-02 13:25:55