0
我有以下列表視圖:WPF列表視圖:當選擇的ListViewItem檢測,然後檢查它
<ListView Margin="10" Name="lvUsers" AlternationCount="2" SelectionMode="Extended">
<ListView.View>
<GridView>
<!-- Checkbox header -->
<GridViewColumn>
<GridViewColumn.Header>
<CheckBox Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"/>
</GridViewColumn.Header>
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsChecked}" />
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Header="Age" Width="50" DisplayMemberBinding="{Binding Age}" />
<GridViewColumn Header="Mail" Width="150" DisplayMemberBinding="{Binding Mail}" />
</GridView>
</ListView.View>
<!-- SELECTED ITEM EVENT -->
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListViewItem_MouseLeftButtonDown" />
</Style>
</ListView.ItemContainerStyle>
</ListView>
和代碼隱藏的事件:
private void ListViewItem_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var item = sender as ListViewItem;
if (item != null && item.IsSelected)
{
//Do your stuff
}
}
和這個數據模型:
public class User : INotifyPropertyChanged
{
private bool isChecked = false;
private string name = string.Empty;
private int age = 0;
private string mail = string.Empty;
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public bool IsChecked {
get
{
return this.isChecked;
}
set
{
if (value != this.isChecked)
{
this.isChecked = value;
NotifyPropertyChanged("IsSelected");
}
}
}
public string Name
{
get
{
return this.name;
}
set
{
if (value != this.name)
{
this.name = value;
NotifyPropertyChanged("Name");
}
}
}
public int Age {
get
{
return this.age;
}
set
{
if (value != this.age)
{
this.age = value;
NotifyPropertyChanged("Age");
}
}
}
public string Mail {
get
{
return this.mail;
}
set
{
if (value != this.mail)
{
this.mail = value;
NotifyPropertyChanged("Mail");
}
}
}
}
我有一個複選框在列表視圖標題和checbox爲每個listview項目。
我想檢測當一個listviewitem被選中,然後一旦選擇我想把它標記爲檢查。 ListViewiteitem事件PreviewMouseLeftButtonDown不起作用,當item.IsSelected爲false時,因爲它是在鼠標左鍵按下之前發生的預覽。沒有MouseClick事件,只有MouseDoubleClick。
此外,一旦listviewitem點擊我想標記爲選中(複選框選中)。
我該怎麼做?
爲什麼不將'SelectedItem'綁定到屬性?並使用轉換器將checkbox.checked綁定到該屬性 – Vallo
注意,您必須在IsChecked屬性設置器中調用'NotifyPropertyChanged(「IsChecked」)'而不是'NotifyPropertyChanged(「IsSelected」)'。 – Clemens