你这还是标准的winform的思考方式。建议如下方法
后台设置属性observablecollection<type> items,这个type根据你自己的需求来定,type里面需要定义isselected属性。xaml里面itemssource绑定到items,并设置item template,呈现出button,还要定义itemcontainerstyle,把item的isselected绑定到typeisselected。这样你前台选中哪个,后台哪个的isselected就是true。
Item有个Selected属性,直接设置为True。例:ListView1Items(0)Selected=True,选中第一项。这样选中的和鼠标单击不同,不会发生其它事件。 如果您对我的回答有不满意的地方,还请您继续追问;
ListView lv = new ListView(); lvItemsAdd(new ListViewItem("abc")); lvItems[lvItemsIndexOf(new ListViewItem("abc"))]Selected = true; 注意第二步添加的项目是怎么定义的,在第三部就要以相同的定义方式去定位那个项目。
ListView默认情况
当item有焦点时,item上的button等子控件获取不到焦点;
当子控件有焦点时,item无焦点无法响应onItemClick事件
ViewGroupFOCUS_AFTER_DESCENDANTS:表示item的子控件优先于item获得焦点;
ViewGroupFOCUS_BEFORE_DESCENDANTS:表示item优先于其子控件获得焦点。
解决办法:
[java] view plaincopy
listViewsetOnItemSelectedListener(onItemSelectedListener);
private AdapterViewOnItemSelectedListener onItemSelectedListener =
new AdapterViewOnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<> parent, View view,
int position, long id) {
//当此选中的item的子控件需要获得焦点时
parentsetDescendantFocusability(ViewGroupFOCUS_BEFORE_DESCENDANTS);
//else parentsetDescendantFocusability(ViewGroupFOCUS_BEFORE_DESCENDANTS);
}
@Override
public void onNothingSelected(AdapterView<> parent) {
parentsetDescendantFocusability(ViewGroupFOCUS_BEFORE_DESCENDANTS);
}
}
//选中行的索引
int index = listviewSelectedIndices[0];
//选中行的值
ListViewItem selecteditem =listviewItems[index];
//选中行的第一列的值
string onetext = listviewItems[index]SubItems[1]Text;
listviewsetOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<> parent, View view,
int position, long id) {
// position就是当前item的位置,通过这个position就可以得到显示这条数据的数据源
Object o = 数据集合get(position);
//再对这个o进行处理就可以了(该对象里面就有你需要的东西)
}
});
在 adapter 的 getView 里面做处理
在List<Entity> 在Entity 里加一个isChecked 字段
点击button时执行adapternotifidatasetchanged刷新listview
此时出发adapter的getview,在这里判断entityisChecked,做自己需要的处理
listview里item的position 可以在itemclick的回调方法里获取, 如果是使用checkBox 控件的话, 需要在adapter的getview方法中进行注册, 记录, 使用自定义的适配器可完成
1、在listitem中初始化button的时候,给该button添加一个setTag方法,将此时的索引值传进去,然后在button的onclick事件中调用view的getTag方法,即可将listitem的索引读出来,代码如下:
tagButtonsetTag(position);
此处的tagButton就是定义的button,Position是view里边的位置。
2、初始化button的时候通过setTag方法传入一个item的索引值
private OnClickListener tagButtonOnClick = new OnClickListener() {
public void onClick(View v) {
final int index = (Integer) vgetTag();
}
以上就是关于WPF 点击ListViewItem中的Button,如何获取选中的是第几行全部的内容,包括:WPF 点击ListViewItem中的Button,如何获取选中的是第几行、如何设置listView的第一个item默认选中、如何为listview 中的item设置获取焦点事件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)