내 Last Problem 발 뒤꿈치를 따라이 시간을 낭비하고 나면 프레임 워크 4가 미묘한 악마의 마스터이거나 내 PC가 귀신이 들었다고 생각하기 시작합니다.WPF Combobox 바인딩 : 선택을 변경할 수 없습니다
나는 3 개의 콤보 박스와 WPF 폼의 텍스트 박스를 가지고 있으며, Out-of-the-Box Subsonic 3 ActiveRecord DAL을 가지고 있습니다. 이 "편집 레코드"폼을로드하면 콤보 상자가 올바르게 채워지고 올바른 항목이 선택되고 텍스트 상자의 텍스트가 올바르게 입력됩니다. TextBox 텍스트를 변경하고 레코드를 저장할 수 있지만 콤보 상자는 변경할 수 없습니다. 목록이 드롭 다운되고 강조 표시되지만 항목을 클릭하면 선택한 항목이 동일하게 유지됩니다. 내가 해봤
SvcMgrDAL.Job oJob;
IQueryable<SvcMgrDAL.JobCategory> oCategories = SvcMgrDAL.JobCategory.All().OrderBy(x => x.CategoryName);
IQueryable<SvcMgrDAL.Asset> oAssets = SvcMgrDAL.Asset.All().OrderBy(x => x.AssetName);
IQueryable<SvcMgrDAL.JobStatus> oStatus = SvcMgrDAL.JobStatus.All();
cboCategories.ItemsSource = oCategories;
cboStatus.ItemsSource = oStatus;
cboAsset.ItemsSource = oAssets;
this.JobID = intJobID;
oJob = SvcMgrDAL.Job.SingleOrDefault(x => x.JobID == intJobID);
this.DataContext = oJob;
것들 : 명시 적으로
- 여기
<StackPanel Orientation="Horizontal" Margin="10,10,0,0"> <TextBlock Width="80">Asset</TextBlock> <ComboBox Name="cboAsset" Width="180" DisplayMemberPath="AssetName" SelectedValuePath="AssetID" SelectedValue="{Binding AssetID}" ></ComboBox> </StackPanel> <StackPanel Orientation="Horizontal" Margin="10,10,0,0"> <TextBlock Width="80">Status</TextBlock> <ComboBox Name="cboStatus" Width="180" DisplayMemberPath="JobStatusDesc" SelectedValuePath="JobStatusID" SelectedValue="{Binding JobStatusID}" ></ComboBox> </StackPanel> <StackPanel Orientation="Horizontal" Margin="10,10,0,0"> <TextBlock Width="80">Category</TextBlock> <ComboBox Name="cboCategories" Width="180" DisplayMemberPath="CategoryName" SelectedValuePath="JobCategoryID" SelectedValue="{Binding JobCategoryID}" ></ComboBox> </StackPanel> <StackPanel Orientation="Horizontal" Margin="10,10,0,0"> <TextBlock Width="80">Reason</TextBlock> <TextBox Name="txtReason" Width="380" Text="{Binding Reason}"/> </StackPanel>
내 코드의 관련 자르는 (intJobID가 전달되는)입니다 : 여기
내 XAML의 설정IsReadOnly="false"
및IsSynchronizedWithCurrentItem="True"
- Ch 콤보 박스의 각도는
ItemSources
에서IQueryables
부터Lists
까지입니다. - 내 자신의 작업 개체 (일반 바닐라 엔터티 클래스
INotifyPropertyChanged
사용). - 콤보 박스의 모든 바인딩 모드.
ItemsSource="{Binding}"
아음속 DAL 는 INotifyPropertyChanged
를 구현하지 않지만, 이런 바인딩 간단한에 대한 필요 싶지만 나는 볼 수 없습니다. 난 그냥 드롭 다운에서 뭔가를 선택하고 그것을 저장할 수 있기를 바랍니다.
내 마지막 문제 (이 메시지의 맨 위에있는 링크)와 비교해 보면, 나는 데이터 소스가 계속 진행되는 가운데 정말 이상한 점이있는 것처럼 보입니다. 아음속일지도 모르지?
EDIT : 어떤 이유로 Set 접근자는 AssetID 속성에서만 처음으로 적용됩니다. WPF는 이제 WTF :
편집 2 향하고있다 : 바인딩 (즉, 그것은 단지 displaymemberpath하는 valuememberpath와 itemssouce를했다) 여전히 그것을하고있어 그리고 당신은 내가 삭제 한 ME-농담 돼! 첫 번째 선택을 수락 한 다음 변경되지 않습니다.
'Job.AssetID'의 접근 자에 중단 점을 설정하려고 했습니까? 치는거야? 귀하가 단계를 수행하면 어떻게됩니까? 실제로 변화합니까? 어쩌면 그것은 예외를 던질 것인가? –
Subsonic DAL을 사용하면 접근자를 치지 않습니다. 내 자신의 개체를 사용하는 경우에도 그것을 공격하지 않지만 빨간색 사각형이 콤보 상자 주위에 나타납니다 ... ?? – SteveCav
확인하십시오 - 빨간색 예외 사각형 내 개체 (Int16 대 32)에서 형식 오류가 있습니다. 따라서 접근자가 접근 할 수 없습니다. – SteveCav