我在xaml中定義了兩個DataGrid
。第一個綁定到一個ObservableCollection
。我想以某種方式將第二個DataGrid
綁定到第一個DataGrid
中所選對象的ObservableCollection
屬性。有沒有簡單的綁定語法,或者我必須在一些選擇事件後面的代碼中做很多額外的東西?綁定到選定對象的可觀察集合列表?
回答
轉到MVVM方式:
- 把你
ObservableCollection
在ViewModel
說ObservableCollection<T1>
其中T1是已經包含你的第二個集合類說ObservableCollection<T2>
- 綁定這個
ObservableCollection<T1>
與第一DataGrid
的DataSource
財產。 - 在您的
ViewModel
中取T1類型的屬性SelectedItem
。 - 將此屬性的
ObservableCollection<T2>
與第二個DataGrid
的DataSource
相關聯。
@Nitin Joshi是絕對正確的。爲了把代碼格式的 「子彈」,你最終可能會喜歡的東西......
查看
<Window.DataContext>
<viewModel:MainViewModel />
</Window.DataContext>
<StackPanel>
<DataGrid ItemsSource="{Binding Items}"
SelectedItem="{Binding SelectedItem}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Column" Binding="{Binding}" />
</DataGrid.Columns>
</DataGrid>
<DataGrid ItemsSource="{Binding SelectedItem}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Column" Binding="{Binding}" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>
視圖模型
public class MainViewModel : ViewModelBase
{
private ObservableCollection<string> _items;
private string _selectedItem;
public MainViewModel()
{
Items = new ObservableCollection<string>(new[] { "a", "b", "c" });
}
public ObservableCollection<string> Items
{
get { return _items; }
set { _items = value; RaisePropertyChanged(); }
}
public string SelectedItem
{
get { return _selectedItem; }
set { _selectedItem = value; RaisePropertyChanged(); }
}
}
輸出
編輯:
如果你不想使用來自MVVMLight
ViewModelBase
(可通過的NuGet),可以實現實現INotifyPropertyChanged
接口自己相同的功能。然後上面會變成:
public class MainViewModel : BaseViewModel
{
// Same code as above, notice different base class
}
哪裏BaseViewModel
是
public abstract class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void RaisePropertyChanged([CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
ViewModelBase是你實現的東西嗎?或者是在其他一些我沒有在標準WPF項目中引用的DLL? – user17753
它是'MVVMLight'的一部分,它使得MVVM的實現變得容易得多。爲此,您可以通過在(基本)ViewModel中實現'INotifyPropertyChanged'來實現所需的功能。 –
編輯我的答案,包括你將如何實現同樣的事情W/O MVVMLight。 –
- 1. 綁定可觀察集合到ListView
- 2. XAML綁定可觀察集合到DataGrid
- 3. 將可觀察集合綁定到GridView
- 4. 綁定兩個可觀察集合
- 5. 將可觀察集合中的Observable集合綁定到列表框項目
- 6. 數據綁定列表框到包含可觀察集合的類的列表
- 7. knockoutjs可觀察對象的可觀察數組綁定
- 8. 合併兩個可觀察的集合並使用Rx綁定到列表框
- 9. 綁定到可觀察子類集
- 10. Javafx將SetProperty綁定到從可觀察對象生成集合的回調
- 11. 對於單向綁定,沒有INotifyProperChanged的可觀察集合
- 12. 對綁定的可觀察集合進行排序
- 13. 將可觀察的集合綁定到XAML中的ListBox
- 14. 如何綁定到可觀察陣列中的選定項目
- 15. 綁定到可觀察陣列
- 16. 無法綁定到可觀察陣列
- 17. 如何在可觀察集合內綁定到列表中的元素?
- 18. 綁定到可觀察的集合獲取元素onTapp
- 19. 可觀察綁定到兩個ICollectionView的同一集合
- 20. 更新綁定到可觀察集合的Combobox
- 21. 將圖像控件綁定到可觀察的集合
- 22. 帶有對象列表的可觀察集合
- 23. 將可觀察集合綁定到上下文菜單
- 24. WPF MVVM動態可觀察集合綁定到數據網格
- 25. 刷新WPF Datagrid未綁定到可觀察集合?
- 26. IsChecked屬性綁定到可觀察集合
- 27. 在MVVM中將可觀察集合綁定到wrappanel
- 28. 綁定到可觀察集合silverlight 4,grid
- 29. 敲除,如何綁定可觀察對象來選擇
- 30. Cocoa:綁定到複合對象並觀察子屬性
權,只是數據源 - >的ItemsSource。 –