Доступ к привязке ListView ItemSource из ItemContainerStyle (WPF) - PullRequest
0 голосов
/ 22 марта 2019

У меня есть элемент управления ListView, который представляет список пользователей на основе их позиций. ItemSource для ListView привязано к списку пользователей в ViewModel.

<UserControl
x:Class="Views.UserPositionView"
d:DataContext="{d:DesignInstance viewModels:UserPositionViewModel, IsDesignTimeCreatable=True}">
<ListView
    ItemsSource="{Binding UserPositions}">
    <ListView.ItemsPanel>
            <ListView.ItemContainerStyle>
                <Style TargetType="{x:Type ListViewItem}">
                <!-- What to bind here? -->
                <Setter Property="IsHitTestVisible" Value="{Binding ElementName=UserButton Path=IsEnabled}"/>
            </ListView.ItemContainerStyle>
    </ListView.ItemsPanel>
    <ListView.ItemTemplate>
        <DataTemplate>
            <Button Name="UserButton"
                    IsEnabled="{Binding IsPresent} />
        </DataTemplate>
</ListView>

Это класс ViewModel (упрощенно).

//ViewModel definition
public class UserPositionViewModel: ViewModelBase {
    private readonly Dictionary<int, UserViewModel> m_users =
            new Dictionary<int, UserViewModel>();

    public IEnumerable<UserViewModel> UserPositions { get { return m_users.Values; } }
}

public class UserViewModel: ViewModelBase {
    private bool m_isPresent;
    public bool IsPresent {get; set {Set(()=> IsPresent, ref m_isPresent, value);}
}

Однако у меня возникают проблемы с привязкой свойства IsHitTestVisible в ListView.ItemContainerStyle. По сути, я хотел бы связать его со свойством IsPresent каждой UserViewModel в UserPositions. Я подумал, что это невозможно, потому что ListView.ItemContainerStyle - это корневые элементы ListView. Я пытался привязать его к имени элемента кнопки, но это тоже не сработало. Я получаю эту ошибку:

 Cannot find source for binding with reference 'ElementName=UserButton '. BindingExpression:Path=IsEnabled; DataItem=null; target element is 'ListViewItem' (Name='');

Какой лучший способ подойти к этому? В идеале я хотел бы иметь доступ к каждому UserViewModel в <ListView.ItemContainerStyle>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...