2012-01-28 164 views
1

我有一個DataGrid,它顯示了Product類型的列表。我想要做的是有一個主/從視圖,其中網格顯示主數據,然後一組文本框(等)顯示詳細視圖。詳細信息主要針對大型文本列,由於文本的大小,不適合在網格中顯示它們。網格和細節區域中還顯示了一些數據項。DataGrid雙向綁定

此外,我需要它,以便網格和細節區域綁定在一起,以便更改或者導致底層數據源被更新 - 如果(例如)網格發生更改,這些更改會立即體現在細節領域,反之亦然。

我認爲這可以通過綁定和依賴屬性來實現 - 但是如何設置呢?

注:由於用戶可以控制顯示在綁定在代碼中手動定義網格哪些列..

var column = new DataGridTextColumn() 
    { 
     Header = attribute.Name, 
     Binding = new Binding(attribute.ColumnName) { TargetNullValue = string.Empty }, 
     IsReadOnly = attribute.IsReadOnly 
    }; 

    dgProductsList.Columns.Add(column); 

回答

2

如果你有一個名爲DataGrid所有你需要做的是綁定DataContext的您的詳細信息區域添加到網格的SelectedItem,該區域內的所有綁定將與該項目的屬性相關

<DataGrid Name="dg" .../> 
<Border DataContext="{Binding SelectedItem, ElementName=dg}"> 
    <StackPanel> 
     <TextBox Text="{Binding SomeTextProperty, UpdateSourceTrigger=PropertyChanged}"/> 
     <!-- ... --> 
    </StackPanel> 
</Border> 

這是默認的雙向,加UpdateSourceTrigger=PropertyChanged立即進行屬性更新,否則當焦點離開TextBox文本被改變。

+0

這個工作和更新網格的底層集合(當我回到修改的網格行詳細信息區域更新我的新值) - 但實際的網格單元格不更新。由於網格的動態特性,其綁定在代碼中定義。更新了問題以顯示綁定代碼。 – Remotec 2012-01-29 10:35:38

+0

@RemotecUk:這應該不重要,你的項目類[實施](http://msdn.microsoft.com/en-us/library/ms229614.aspx)['INCP'](http://msdn.microsoft .COM/EN-US /庫/ system.componentmodel.inotifypropertychanged.aspx)? – 2012-01-29 13:33:42