У меня есть отдельное представление, которое содержит наблюдаемую коллекцию и хотел бы использовать выбранный элемент из коллекции в другом представлении (MainView). Может кто-нибудь сказать мне, как реализовать изменение свойства в MainView?
Главное окно:
<Window.DataContext>
<local:MainWindowViewModel x:Name="mainWindowViewModel"/>
</Window.DataContext>
<Window.Resources>
<view:OwnerListViewModel x:Key="OwnerList"/>
</Window.Resources>
<TextBlock Height="25" Margin="0 5 0 0" Grid.Row="1" Grid.Column="0" Text="{Binding
PersonModel.FirstName}" ></TextBlock>
<TextBlock Height="25" Margin="0 5 0 0" Grid.Row="1" Grid.Column="1" Text="{Binding
PersonModel.SurName}" Grid.ColumnSpan="2"></TextBlock>
В MainWindowViewModel:
private OwnerListViewModel OwnerListViewModel { get; } = new OwnerListViewModel();
public Owner PersonModel
{
get { return OwnerListViewModel.PersonModel; }
set { OwnerListViewModel.PersonModel = value; OnPropertyChanged(); }
}
В окне LoadOwner, я создал ListView:
<Window.DataContext>
<view:OwnerListViewModel/>
</Window.DataContext>
<ListView Grid.Column="0" ItemsSource="{Binding PersonsView}" SelectedValue="{Binding
PersonModel, Mode=TwoWay}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding SelectionChangedCmd}"
CommandParameter="{Binding
ElementName=PersonListWindow}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<ListView.ItemTemplate>
<DataTemplate>
<Grid Height="auto">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Margin="0 0 5 0" VerticalAlignment="Center"
Text="{Binding FirstName}"/>
<TextBlock Grid.Column="1" VerticalAlignment="Center"
Text="{Binding SurName}"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Мой OwnerListViewModel:
Здесь я не уверен, как реализовать изменение свойства. Использование асинхронной задачи или есть другие варианты? Буду очень признателен за подсказку!
public OwnerListViewModel()
{
Persons = new ObservableCollection<Owner>();
var sample1 = new Owner()
{
FirstName = "SampleFirstName1",
SurName = "SampleLastname1",
Street = "SampleStreet1",
HouseNumber = 987,
AdditionalAdress = "",
ZipCode = 99999,
City = "SampleCity1"
};
AddOwner(sample1);
PersonsView = CollectionViewSource.GetDefaultView(Persons);
PersonsView.CurrentChanged += (s, e) =>
{
OnPropertyChanged(() => PersonModel);
};
SelectionChangedCmd = new RelayCommand<Window>(this.closeWindow);
}
#region listProperties
private ObservableCollection<Owner> Persons { get; }
public ICollectionView PersonsView { get; set; }
public Owner PersonModel
{
get => PersonsView.CurrentItem as Owner;
set
{
PersonsView.MoveCurrentTo(value);
OnPropertyChanged();
}
}