我有一个ListView控件,该控件根据用户的位置显示用户列表。 ListView的ItemSource
绑定到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
属性时遇到了麻烦。本质上,我想将其绑定到UserPositions中每个UserViewModel的IsPresent
属性。我认为这是不可能的,因为ListView.ItemContainerStyle
是ListView的根项。我试图将其绑定到按钮的elementname,但这也不起作用。我收到此错误:
Cannot find source for binding with reference 'ElementName=UserButton '. BindingExpression:Path=IsEnabled; DataItem=null; target element is 'ListViewItem' (Name='');
解决此问题的最佳方法是什么?理想情况下,我想访问UserViewModel
中的每个<ListView.ItemContainerStyle>
。