我在xaml中定义了两个DataGrid
。第一个绑定到一个ObservableCollection
。我想以某种方式将第二个DataGrid
绑定到第一个ObservableCollection
中所选对象的DataGrid
属性。是否有简单的绑定语法,或者我是否必须在某些select事件的代码中执行大量额外的操作?
答案 0 :(得分:1)
走MVVM方式:
ObservableCollection
中ViewModel
说ObservableCollection<T1>
,其中T1是已包含第二个集合的类ObservableCollection<T2>
ObservableCollection<T1>
与DataSource
的{{1}}属性绑定。DataGrid
。SelectedItem
ViewModel
的{{1}}绑定此媒体资源ObservableCollection<T2>
。答案 1 :(得分:1)
@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(); }
}
}
<强>输出强>
修改强>
如果您不想使用ViewModelBase
中的MVVMLight
(可通过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));
}
}