C # WPF два разных DataContext в одном элементе управления при использовании MVVM и свойства secound каждый раз одинаковы

#wpf #binding #datacontext #relativesource

#wpf #привязка #datacontext #relativesource

Вопрос:

Сначала код:

 <ListView ItemsSource="{Binding DataTransferModel.Output}" Background="Transparent" Margin="0" VerticalContentAlignment="Top" AlternationCount="2" Name="lvOutput" ScrollViewer.VerticalScrollBarVisibility="Auto" Grid.Row="2">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal" Margin="0,1">
                <UserControls:OutputTextBox Text="{Binding Data, Mode=OneWay}" 
                                            IsReadOnly="True" 
                                            Grid.Row="2" 
                                            TextWrapping="WrapWithOverflow" 
                                            SelectedValue="{Binding Path=DataContext.SelectedOutput, 
                                                            Mode=TwoWay, 
                                                            UpdateSourceTrigger=PropertyChanged, 
                                                            RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}
                                                            }" 
                                            />
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
  

И проблема в том, что свойство Data элемента управления OutputTextBox берется из списка, но свойство SelectedOutput должно быть получено из основного DataContext ViewModel. И свойство SelectedOutput должно быть одинаковым для каждой записи в списке. Но в настоящее время это не работает. 🙁

Ответ №1:

заключен ли ваш listview в теги, и если да, содержит ли сетка DataContext из ViewModel? если да, то это должно сработать.

видите ли вы какие-либо ошибки привязки в вашем окне вывода? возможно, вам следует попробовать использовать Snoop, чтобы увидеть вашу реальную привязку SelectedValue.

РЕДАКТИРОВАТЬ: Пожалуйста, попробуйте другой тип, чем Grid, возможно, ListView, если у него есть ViewModel DataContext.

 <UserControls:OutputTextBox Text="{Binding Data, Mode=OneWay}" 
                                        IsReadOnly="True" 
                                        Grid.Row="2" 
                                        TextWrapping="WrapWithOverflow" 
                                        SelectedValue="{Binding Path=DataContext.SelectedOutput, 
                                                        Mode=TwoWay, 
                                                        UpdateSourceTrigger=PropertyChanged, 
                                                        RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}
                                                        }" 
                                        />
  

Комментарии:

1. Следующий тег для внешней области — это сетка из списка, а DataContext устанавливается в ViewModel при загруженном событии окна. Но это не работает. 🙁

2. пожалуйста, попробуйте выполнить поиск, чтобы увидеть, какова фактическая привязка SelectedValue.