2013-11-01 2 views
1

XAML보기 :Datagrid의 SelectedItem을 읽기 전용 목록에 올바르게 바인딩하는 방법?

<DataGrid x:Name="dgInstances" SelectedItem="{Binding Path=Instance, Mode=OneWay}" 
      ItemsSource="{Binding Instances}"> SelectionMode="Single"> ... etc. 

뷰 모델 : 뷰 모델 클래스가 INotifyPropertyChanged을 구현하고 Instances이 인출 된 후 나는 RaisePropertyChanged("Instance");을 제공

public List<string> Instances 
string instance; 
public string Instance 
{ 
    get 
    { 
     if (instance == null && instances.HasItems()) 
     { 
      instance = instances[0]; 
     } 
     if (instance != null) 
     { 
      return instance; 
     } 
     return null; 
    } 
    set 
    { 
     instance = value; 
    } 
} 

.
인스턴스가 데이터 격자에 제대로 표시되지만 첫 번째 항목은 선택되지 않습니다.
바인딩을 통해 사용해야하기 때문에 SelectedIndex=0을 추가하고 싶지 않습니다.
그리고 데이터 격자에서 선택을 변경하면 데이터 바인더 Instance의 설정자가 사용되지 않습니다.
물론 그것은 물론 요구 사항입니다.
읽기 전용 목록입니다. 선택한 항목 만 데이터 바인딩되어야하며 값은 입력되지 않아야합니다. 난 정말 WPF DataGrid를 사용하지 않는 동안

답변

1

, 나는 과거에 당신이하지 BindDataGrid.SelectedItem받는 속성이 ... 모두, 그것은 꽤 쓸모 숙박 시설의 수 회상 것 같습니다했다. 그러나, 나는 당신이 거의 같은 것을하는 BindDataGrid.CurrentItem property 믿습니다.


UPDATE >>>

난 그냥 발견이 언급 여기에 StackOverflow에 WPF DataGrid SelectedItem binding stops working after item change 게시 할 수 있습니다.

또한, 당신이 예를 들어 UI 요소 Binding,에 DataGrid.SelectedItem 속성을 사용할 수 있습니다 것으로 보인다. TextBox에 표시하면 완전히 쓸모가 없습니다. 단지 거의 쓸모가 없습니다. 당신이 정말DataGrid.SelectedItem 속성에 액세스해야하는 경우


업데이트 2 >>>

, 당신은 AttachedPropertyDataGrid.SelectionChanged 이벤트를 처리하기 위해 만들 수 있습니다. 3 >>>

내 컬렉션 클래스


UPDATE는 ObservableCollection<T> 클래스를 확장 정의 기본 클래스를 확장한다. 내 맞춤 BaseColection<T> 클래스는 T 유형의 CurrentItem 속성을 가지고 있습니다. 나는이 속성을 컬렉션 컨트롤의 SelectedItemBind에 사용합니다. 그러나,이 표시되는 컬렉션의 항목과 동일한 유형의 뷰 모델에 속성을 추가하는 것과 같은 효과를 가지고 있지만, 그것은 단지 더 편리 : 컬렉션의 항목이있는 경우,

<ListBox ItemsSource="{Binding AudioTracks}" 
    SelectedItem="{Binding AudioTracks.CurrentItem}" ... /> 

다음 작고 포함하고 모두 데이터를 편집해야하는 경우, 예제 이미지의 오른쪽에있는 편집 가능 필드에 AudioTracks.CurrentItem 속성을 사용합니다.그러나 데이터 객체에 이미지와 같이 많은 필드가있는 경우 AudioTracks.CurrentItem.Id 속성 값을 사용하여 데이터베이스에 전송하여 편집에 필요한 모든 값을 검색하는 반면 컬렉션의 AudioTracks 항목은 몇 개만 유지합니다 컬렉션에 그들의 27,000+이있을 수있는 값 (있기 때문이다. 마지막으로

을하는 TreeView의 연결된 예에 대한 온라인 검색하면, 나는 일반적으로 ... TreeView.SelectedItems 속성에 Bind 당신을 사용자 정의 SelectedItems Attached Property을 사용

+0

WPF DataGrid를 사용하지 않으면 대신 무엇을 사용합니까? – Gerard

+0

나는 WPF pr을 활용하는 것을 선호합니다. 한쪽에는 선택 패널이 있고 다른 한쪽에는 선택한 항목을 편집 할 수있는 편집 패널이있는 사용자 정의 UI가 있습니다. [데이터 엔티티> 도메인 개체> ViewModels에 스크린 샷을 추가했습니다. 각각 다른 데이터 구조가 있습니다.] (http://stackoverflow.com/questions/19693682/data-entities-domain-objects-viewmodels-each-with- 대단히 다름/19694623 # comment29312293_19694623) 최근 게시물. – Sheridan

+0

Ok -보기에서 선택한 항목이나 현재 항목을보기 모드에서 선택한 항목 또는 현재 항목과 바인딩하는 방법과 예를 어떻게 구성합니까? 예 : 또한 http://stackoverflow.com/a/3009906/138078에서 viewmodel의 selecteditem에 대한 간단한 바인딩이 사용됩니다. – Gerard