ListView的用&QUOT结合; IsSelected" ListViewItem的财产 [英] ListView Binding with "IsSelected" Property of ListViewItem

查看:148
本文介绍了ListView的用&QUOT结合; IsSelected" ListViewItem的财产的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下类

   public abstract class AbsTrinityEvent
   {
    public event IsSelected OnSelectedEvent; 

    bool _IsSelected;
    ITrinityEvent _objTrinityEvent;
    public AbsTrinityEvent(ITrinityEvent objTrinityEvent)
    {
        _objTrinityEvent = objTrinityEvent;
    }


    public ITrinityEvent TrinityEventObj
    {

        set
        {
            _objTrinityEvent = value;
        }

        get
        {
            return _objTrinityEvent;
        }
    }

    public int EventRefID
    {
        get
        {
            return _objTrinityEvent.EventRefID;
        }
    }

    public string EventDescription
    {
        get
        {
            return _objTrinityEvent.EventDescription;
        }
    }

    public string EventDateTime
    {
        get
        {
            return _objTrinityEvent.EventDateTime;
        }
    }

    public string Site
    {
        get
        {
            return _objTrinityEvent.Site;
        }
    }

    public int Priority
    {
        get
        {
            return _objTrinityEvent.Priority;
        }
    }

    public string DeviceName
    {
        get
        {
            return _objTrinityEvent.DeviceName;
        }
    }

    public bool IsAlarm
    {
        get
        {
            return _objTrinityEvent.IsAlarm;
        }
    }

    public string OperatorName
    {
        get
        {
            return _objTrinityEvent.OperatorName;
        }
    }

    public int SiteID
    {
        get
        {
            return _objTrinityEvent.SiteID;
        }
    }

    public int EventSrcInstanceID
    {
        get
        {
            return _objTrinityEvent.EventSrcInstanceID;
        }
    }


    public int EventSrcInstanceMasterDeviceID
    {
        get
        {
            return _objTrinityEvent.EventSrcInstanceMasterDeviceID;
        }
    }

    public bool IsSelected
    {
        set
        {
            _IsSelected = value;
            ItemSelectedEventArgs obj = new ItemSelectedEventArgs(_objTrinityEvent);
            OnSelectedEvent(this, obj);                                        
        }
        get
        {
            return _IsSelected;
        }
    }      

}

public class ItemSelectedEventArgs : EventArgs
{
    private ITrinityEvent _objItem;

    public ItemSelectedEventArgs(ITrinityEvent objItem)
    {
        _objItem = objItem;

    }

    public ITrinityEvent SlectedNode
    {
        get
        {
            return _objItem;
        }
    }
}

public sealed class TrinityEventData : AbsTrinityEvent
{
    public TrinityEventData(ITrinityEvent objEvent)
        : base(objEvent)
    {
    }
}

我在code结合这对我后面的列表视图(而不是在XAML)使用下面的函数

I am binding this to my listview in code behind ( Not in XAML ) using following function

    public void SetupColumnsForUnAcklist()
    {
        //Create Columns for listview
        GridView grdView = new GridView();
        grdView.Columns.Add(new GridViewColumn() { DisplayMemberBinding = new Binding() { Path = new PropertyPath("EventDescription") }, Header = "Description" });
        grdView.Columns.Add(new GridViewColumn() { DisplayMemberBinding = new Binding() { Path = new PropertyPath("EventDateTime") }, Header = "Date:Time" });
        grdView.Columns.Add(new GridViewColumn() { DisplayMemberBinding = new Binding() { Path = new PropertyPath("Site") }, Header = "Site" });
        grdView.Columns.Add(new GridViewColumn() { DisplayMemberBinding = new Binding() { Path = new PropertyPath("DeviceName") }, Header = "Device" });
        grdView.Columns.Add(new GridViewColumn() { DisplayMemberBinding = new Binding() { Path = new PropertyPath("Priority") }, Header = "Priority" });



        lstview_Unack.View = grdView;                   

        //Do Binding 
        if (_alarmUnAckList != null)
        {

            lstview_Unack.SetBinding(ListView.ItemsSourceProperty, new Binding() { Source = _alarmUnAckList });
            lstview_Unack.SetBinding(ListView.IsSelectedProperty, new Binding() { Path = new PropertyPath("IsSelected") });
        }

        lstview_Unack.ContextMenu = contextMenu;

        foreach (GridViewColumn col in grdView.Columns)
        {
            comboColumnList.Items.Add(col.Header as string);
        }           
    }

我的问题是,我想ListViewItem的IsSelected属性​​绑定到TrinityEventData的IsSelected属性​​。我如何我应该做在code后面。

My problem is, I want bind ListViewItem "IsSelected" Property to the TrinityEventData's "IsSelected" Property. How I should I do it in code behind.

请帮忙。

问候
桑迪普

推荐答案

首先,你好得多在XAML中这样做。这使事情变得更清晰和更短。我打算在这两个XAML和code,后面回答证明这一点。

First off, you're much better off doing this in XAML. It makes things much clearer and shorter. I'm going to answer in both XAML and code-behind to demonstrate this.

最简单的方法就是让应用到ListViewItem的,并使用二传手应用结合的风格。在一个ListViewItem的,在DataContext将是你的绑定项(TrinityEventData在这种情况下)。

The easiest way is to make a Style applied to ListViewItem and using a Setter to apply the binding. On a ListViewItem, the DataContext is going to be your bound item (TrinityEventData in this case).

假设你已经在你的XAML的ListView:

Assuming you had your ListView in XAML:

<ListView x:Name="lstview_Unack">
    <ListView.Resources>
        <Style TargetType="{x:Type ListViewItem}">
            <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
        </Style>
    </ListView.Resources>
</ListView>

在code,你必须构造样式,二传手,并手动绑定:

In code, you have to construct the Style, Setter, and Binding by hand:

Style listViewItemStyle = new Style { TargetType = typeof(ListViewItem) };
listViewItemStyle.Setters.Add(new Setter
{
    Property = ListViewItem.IsSelectedProperty,
    Value = new Binding { Path = new PropertyPath("IsSelected") }
});
lstview_Unack.Resources.Add(typeof(ListViewItem), listViewItemStyle);

有这个和虚拟化的问题,但是。如果您ListViewItems获得虚拟化的,你可能会在ListView中取消选择项,但不会被解雇,因为你的ListViewItem将不存在绑定。

There are issues with this and virtualization, however. If your ListViewItems get virtualized, you might be unselecting items in the ListView but the binding won't be firing because your ListViewItem won't exist.

这篇关于ListView的用&QUOT结合; IsSelected&QUOT; ListViewItem的财产的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆