gpt4 book ai didi

wpf - ListView 与 ListViewItem 的 "IsSelected"属性绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 13:38:45 25 4
gpt4 key购买 nike

我有以下类(class)

   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)
{
}
}
我使用以下函数将它绑定(bind)到我的 ListView 中的代码后面(不在 XAML 中)
    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”属性绑定(bind)到 TrinityEventData 的“IsSelected”属性。我应该如何在后面的代码中做到这一点?

最佳答案

首先,最好在 XAML 中执行此操作。它使事情变得更加清晰和简短。我将在 XAML 和代码隐藏中回答以证明这一点。

最简单的方法是将 Style 应用于 ListViewItem 并使用 Setter 来应用绑定(bind)。在 ListViewItem 上,DataContext 将成为您的绑定(bind)项(在本例中为 TrinityEventData)。

假设您在 XAML 中有 ListView:

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

在代码中,您必须手动构造 Style、Setter 和 Binding:
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 中的项目,但不会触发绑定(bind),因为您的 ListViewItem 将不存在。

关于wpf - ListView 与 ListViewItem 的 "IsSelected"属性绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/483005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com