2013-11-22 2 views
0

나는 아직도 이것에 갇혀있는 것 같아서 제대로 단어를 찾을 수 없다. 나는 하드 드라이브를 나열하는 콤보 박스를 가지고 있는데, HDD가 선택되면 목록 상자를 채워야한다. 그 선택된 HDD의 이미지로, 내가 붙어있는 부분은 콤보 상자에서 선택한 HDD의 파일을 가져 오는 내 목록을 얻는 방법입니다. 대신 Enviroment.SpecialFolder.MyPictures를 넣는 대신에 콤보 박스. 나는 이제옵니다 적절한를 선택하는 데 도움을 hdd을 사용할 수 있습니다콤보 상자의 이미지로 목록 상자를 채운다

+1

선택한 드라이브의 모든 폴더와 하위 폴더의 모든 이미지를 의미합니까? [System.IO.Directory] (http://msdn.microsoft.com/en-us/library/system.io.directory.aspx)의'Enumerate' 메서드를보십시오. 드라이브에있는 모든 폴더 및 이미지 파일을 재귀 적으로 열거해야합니다. – Clemens

+0

나는 꽤 멍청하다. 그래서 실례지만, 모든 이미지를로드하는 목록이있다. 목록은 각 루프에 대해 새 인스턴스를 만든다. foreach (Directory.GetFiles ((MyComboBox.SelectedItem.ToString()))), 각 목록 상자 항목은 c :/etc와 같은 주소입니다. 문자열로 변환하려고하면 다음과 같이 directory.getfiles를 사용하는 경로로 사용합니다. directory.getfiles의 beginginning에서 객체를 가져옵니다. 참조가 객체의 인스턴스로 설정되지 않았으므로 지금까지 도움을 주셔서 감사합니다. –

답변

0

한 가지 방법은

private void OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     var item = combo.SelectedItem as ComboBoxItem; 
     if (item == null) return; 
     var hdd = item.Content.ToString(); 
    } 

뒤에 코드에서 다음

<ComboBox Name="combo" SelectionChanged="OnSelectionChanged" > 

수 있습니다 목록에 바로 붙어 DataTemplate이 모든 것을 가지고 HHD 항목.

+0

개인적으로이 코드 숨김을 사용하지 마십시오. WPF의 요점은 종속성 주입 및 단위 테스트 등과 같은 작업을 수행 할 수있는 MVVM 모델을 용이하게한다는 것입니다. "올바른"방법은 하드 드라이브 목록 및 현재 선택된 하드에 대한 멤버가 포함 된 모델에 바인딩하는 것입니다 드라이브 등을 누른 다음 사용자가 콤보 상자에서 항목을 선택하는 것에 대한 응답으로 새 목록 등을 생성하기 위해 setter에 코드를 추가합니다. –

+0

@Mark 그래,하지만 왜 MVVM + XAML로 대답을 난처하게 만들었지. 그는 이미이 길을 걷고 있습니다. 사실 나는 Directory.GetFiles (MyComboBox.SelectedItem ...)에 null ref 예외가 의심됩니다. MyComboBox에 선택된 항목이 없기 때문입니다 – narendra

+0

그가 존경하는 모든 경로가 잘못된 것입니다. 내 문제는 그렇지 않습니다. WPF의 기반이되는 데이터 바인딩 메커니즘을 사용하는 것과 관련하여 MVVM을 많이 사용했기 때문에 어제 나단 (Nathan)과 거의 동일한 질문에 답했습니다. 아직 명확하게 그는 그것에 동의하고 있습니다 (WPF는 매우 가파른 학습 곡선이며, 처음에는 우리 모두가 갈등을 겪고 있습니다.) 코드 뒤에서 절대적으로 사용해야한다면, 적절한 메커니즘을 사용하고 쉽게 다시 팩터링 할 수있는 방식으로 윈도우의 데이터 컨텍스트를 바인딩하십시오 나중에 너무 많은 고통없이 밖으로. –

관련 문제