2010-12-10 4 views
1

WPF 데이터 바인딩을 처음 사용했습니다.)합니다 (Window_Loaded에 ListBox.ItemsSource = (method);을 할당하여ListBox Items ItemsSource를 컴파일시에 메서드 호출 결과에 바인딩합니까?

RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32) 
    .OpenSubKey(@"SOFTWARE\Vendor\Product\Systems").GetSubKeyNames(); 

내가 런타임에하고 있어요 순간 :

나는 나는 다음과 같은 메소드 호출의 결과에 바인딩 할 폼에 목록 상자를 이벤트 핸들러. 그러나 이것은 폼 에디터에서 컨트롤 구성을 볼 때 컨트롤의 소스 데이터가 명확하지 않다는 것을 의미합니다.

XAML 내에서이 바인딩을 구성하여 코드의 동작을 더 쉽게 이해할 수 있도록 양식 편집기에 표시 할 수 있습니까?

MSDN 설명서에있는 대부분의 예제는 컨트롤을 인라인 XAML 리소스와 같은 정적 리소스에 바인딩합니다. 나는 "[...] 메서드의 결과에 바인딩하는 기능을 제공하는 ObjectDataProvider 클래스가 있음을 발견했습니다." 그러나 꽤 혼란 ObjectDataProvider 설명서 예제를 찾으십시오. 이 바인딩을 수행하는 올바른 방법인지 아닌지에 대한 조언을 주시면 감사하겠습니다. 그렇다면 ObjectDataProvider를 선언 할 때 사용할 구문은 무엇입니까?

답변

3

요약하면 복잡한 구문을 XAML에서 직접 사용할 수 있다고는 생각하지 않습니다. 찾은 것처럼 ObjectDataProvider를 통해 개체의 메서드를 호출 한 결과에 바인딩 할 수는 있지만 Expression 개체는 XAML에서 직접 ObjectDataProvider를 소스하는 데 사용할 수없는 메서드 호출 체인입니다.

Model-View-ViewModel과 같이 분리 된 표현 패턴을 구현하는 방법에 대해 생각해보십시오. 그러면 표현식의 결과가 뷰 (Window)의 DataContext로 바인딩되는 ViewModel의 컬렉션 속성을 통해 노출됩니다. 같은

뭔가 :

MainWindow.xaml

<Window x:Class="WpfApplication10.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <ItemsControl ItemsSource="{Binding Items}"/> 
    </Grid> 
</Window> 

MainWindow.cs

웨인, 나는 그로 살펴 보겠습니다
using System; 
using System.Collections.Generic; 
using System.Windows; 
using Microsoft.Win32; 

namespace WpfApplication10 { 
    public class ViewModel { 
     public IEnumerable<String> Items { 
      get { return RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(@"SOFTWARE\Vendor\Product\Systems").GetSubKeyNames(); } 
     } 
    } 

    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window { 
     public MainWindow() { 
      InitializeComponent(); 
      DataContext = new ViewModel(); 
     } 
    } 
} 
+0

감사합니다. – Hydrargyrum

관련 문제