#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.