내 ViewModel에서 프로그래밍 방식으로 WPF DataGrid의 포커스와 강조 표시를 프로그래밍해야합니다. 데이터 격자는 하나의 열이 :.Net ItemCollection에서 IndexOf 개체를 얻는 방법
private IEnumerable<AdrTypeMdl> _itemsList;
ItemsLcv = CollectionViewSource.GetDefaultView(_itemsList) as ListCollectionView;
이 내가 데이터 필드 "DESCR"의 뷰 모델에 자체 속성 당이없는 경우에도 작동합니다
<DataGrid Name="DgAdrType"
ItemsSource="{Binding ItemsLcv}"
IsSynchronizedWithCurrentItem="True"
<DataGridTextColumn Header=" Description"
IsReadOnly="True"
CanUserSort="True" Binding="{Binding descr, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
그리고 데이터 컨텍스트의 뷰 모델에
왜냐하면 DataGrid의 ItemSource를 바인딩하기 때문입니다. 뷰 모델 내가 지금처럼보기에서 해당 ItemCollection를 전달하여 항목의보기 데이터 그리드의 ItemCollection에 액세스 할 수 있습니다에서 :<!-- Interaction for click selection -->
<i:Interaction.Triggers>
<i:EventTrigger EventName="GotMouseCapture">
<i:InvokeCommandAction Command="{Binding SelObjChangedCommand}"
CommandParameter="{Binding ElementName=DgAdrType, Path=Items}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
그리고 다시 뷰 모델에서, 정말 같은 데이터 그리드의 항목을로드 :
private ItemCollection _dgItems;
private void SelObjChanged(object theItems)
{if (theItems !=null)
{ _dgItems = theItems as ItemCollection;
해당 ItemCollection의 DataGrid 속성을 유지할 수 있도록 캐스팅을 ItemCollection에 유지하려고합니다. 문제는 ItemCollection의 IndexOf 메서드가 작동하지 않는다는 것입니다. 이 작업을 수행하여 클래스 개체 항목 중 하나의 인덱스를 찾으려고 할 때만 -1을 얻습니다.
var idx = _dgItems.IndexOf(myobject);
편집 -------이 ------------------ 방법의 전체 코드는 IndesOf
private void HandleUpdateListEvent(Object myobject)
{AdrTypeMdl theNewItem = myobject as AdrTypeMdl;
bool co = _dgItems.Contains(theNewItem);
var idx = _dgItems.IndexOf(theNewItem);
_dgItems.MoveCurrentToPosition(idx);
_dgItems.Refresh();}
편집 시도이다 --------------- ------이 쉽게 접근하지만 난 여전히 λ/필터 식 및 방법 호출
// this is where I try to get the index of an object for highlighting
private void HandleUpdateListEvent(Object myobject)
AdrTypeMdl theNewItem = myobject as AdrTypeMdl;
var e = ItemsLcv.SourceCollection.GetEnumerator();
ItemsLcv.Filter = o => (o == theNewItem);
foreach (row in ItemsLcv)
{ if row == theNewItem
return e >;
e = -1;}
ItemsLcv.MoveCurrentToPosition(e);
ItemsLcv.Refresh();}
END 편집에 도움이 필요 ---------------
디버거에서 _dgItems 클래스 개체를 볼 수 있습니다. 내가 이것을하면 효과가있다.
var idx = _dgItems.IndexOf(_dgItems[2]);
그러나 매개 변수가 클래스 개체 인 경우 IndexOf 메서드가 작동하지 않습니다. 문제는 DataGrid 항목을 ItemCollection으로 캐스트 한 것입니다. 나는 Object 클래스를 형 변환 할 필요가있다. myObject를 DataGrid에서 가져온 ItemCollection에서 인식 할 수있는 항목으로 변경합니다. 해결 방법이 있습니까? 고맙습니다.
네, 저도 시도해 보았습니다. 아래의 명시 적 선언을 시도했지만 여전히 idx는 -1이됩니다. AdrTypeMdl theNewItem = AdrTypeMdl로 페이로드. – harpagornis
전체 코드를 게시하십시오. – ViVi
전체 코드는 무엇입니까? 보기, ViewModel? – harpagornis