У меня есть сетка, отображающая содержимое наблюдаемого набора людей и два текстовых поля, показывающие свойства выбранной строки. Если вы захотите, просмотрите мастер-деталь.Связывание с коллекцией в viewmodel с IsSynchronizedWithCurrentItem
При назначении ObservableCollection к DataContext вы можете просто сделать это:
<Grid>
<Grid Background="Gray">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
</Grid.RowDefinitions>
<igWPF:XamDataGrid Grid.Row="0" DataSource="{Binding}" IsSynchronizedWithCurrentItem="True" />
<StackPanel Grid.Row="1" Orientation="Horizontal">
<TextBox Height="21" Width="100" Margin="5,0,5,0" Text="{Binding Name}"></TextBox>
<TextBox Height="21" Width="100" Text="{Binding Age}"></TextBox>
</StackPanel>
</Grid>
</Grid>
IsSynchronizedWithCurrentItem-свойство гарантирует, что выбранный элемент в сетке является один, который обрабатывается в текстовых полях.
Мне было интересно, можно ли сделать эту точную вещь, когда наблюдаемое собрание не находится непосредственно в datacontext, а скорее расположено в режиме просмотра (который назначается datacontext окна).
public class TestViewModel: DependencyObject
{
public TestViewModel(){
Results = new ObservableCollection<Person>();
Results.Add(new Person { Age = "23", Name = "Able" });
Results.Add(new Person { Age = "25", Name = "Baker" });
}
public ObservableCollection<TagDlgmtEntity> Results
{
get { return (ObservableCollection<Person>)GetValue(ResultsProperty); }
set { SetValue(ResultsProperty, value); }
}
public static readonly DependencyProperty ResultsProperty =
DependencyProperty.Register("Results", typeof(ObservableCollection<Person>), typeof(TestViewModel), new PropertyMetadata(null));
}
Я хотел бы не переназначить DataContext на более низком уровне в визуальном дереве, или связать с SelectedItem свойством сетки.
Можно ли использовать этот механизм таким образом?
Спасибо!
Я бы порекомендовал реализации ViewModel по-разному. Либо реализуйте свою собственную ViewModelBase, которая реализует «INotifyPropertyChanged» или (лучше IMO), используя структуру MVVM, например, например. [MVVMLight] (http://mvvmlight.codeplex.com/), который дает вам приличную ViewModelBase бесплатно. Обычно вам не нужно возиться с зависимыми свойствами в ViewModel. – EagleBeak