2011-04-30 4 views
1

나는이 문제에 대해 여러 가지 일을 해왔으며 아직 답변을 찾지 못했습니다. 바라건대 너희들도 도울 수 있기를.ObservableCollection 양방향 바인딩 WPF DataGrid에 <string>

나는 string 타입의 관찰 가능 콜렉션을 가지고있다. 이 컬렉션을 DataGrid에 바인딩하고 컬렉션을 편집/삭제/추가 할 수 있습니다. 여기 내 xaml입니다 :

<DataGrid ItemsSource="{Binding Movies.Titles}" CanUserDeleteRows="True" CanUserAddRows="True" Height="300"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding Path=DataContext, RelativeSource={RelativeSource Self}}"/> 
    </DataGrid.Columns> 
</DataGrid> 

같은 observablecollection 또한 목록 상자에 바인딩됩니다. DataGrid 메서드 (위)를 사용하여 컬렉션을 편집하고 목록 상자에서 변경 내용/편집 내용을 볼 수 있어야합니다. 삭제/추가가 올바르게 작동하지만 격자 셀 내부의 문자열을 편집 할 때 포커스가 사라지면 문자열은 처음에 원래대로 돌아가고 결코 업데이트되지 않습니다.

도움/제안 사항에 대해 고맙습니다.

답변

3

와우, 나는 어제 이것을하러 갔고 ObservableCollection에 새로운 라인을 추가 할 DataGrid가 붙어있었습니다. 연구 후, 나는 그 이유를 깨달았다. 문자열 및 불변.

이 질문을 발견했지만 불행히도 대답이 없습니다. 그래서 나는 이것을 공백으로 남겨 둘 수 없다.

그래서 여기 내가 찾은 답은 다음과 같습니다

  1. 데이터 그리드를 추가, 편집 또는 문자열을 제거하여 문자열의 집합을 업데이트 할 수 없습니다.

  2. 문자열을 StringWrapper 개체로 래핑하는 해결 방법을 발견했습니다. 여기있어.

    public class StringWrapper { public string Text {get; 세트; } }

나는 어느 대답도 싫어했습니다.

원래 질문자 인 moncadad는 한 열의 DataGrid를 원했던 것처럼 보입니다. 그는 단지 많은 코드없이 ObservableCollection에서 문자열을 추가 및 제거하려고합니다. 편집은 아마 너무 중요하지 않으므로 삭제로 끝내고 다시 추가 할 수 있습니다.

필자는 재사용 가능한 usercontrol을 사용하여이 작업을 끝내 었으며 StringListBox라고 불렀습니다.

A ListBox for strings that supports add and delete

기본적 아이디어는 레이블, 목록 상자, 텍스트 상자와 추가 버튼으로 데이터 그리드의 모양을 만드는 것입니다 및이 컨트롤을하기 때문에, 그것은 하나의 ObservableObject 또는 목록에서 작동한다 제어.

이렇게하면 추가 및 삭제가 가능합니다. 나는 편집을 제공하지 않는다.

희망은 다음 사람을 돕습니다.

0

사실 그것은 당신이 당신의 바인딩에

Mode=OneWay 

를 사용해야 작동합니다.

도움이 되었기를 바랍니다.

관련 문제