2009-11-26 6 views
0

콤보 상자에 일부 데이터 형식을 표시하려고합니다. 데이터 유형은 다음 클래스에 싸여있다 :활동 데이터 바인딩 wf 4.0

public class TDataTypeBinder: INotifyPropertyChanged 
{ 
    private string name; 
    public string Name 
    { 
     get 
     { 
      return name ; 
     } 
     set 
     { 
      name = value; 
      OnPropertyChanged("Name"); 
     } 
    } 

    private DataType datatype; 
    public DataType Datatype 
    { 
     get 
     { 
      return datatype; 
     } 
     set 
     { 
      datatype = value; 
      OnPropertyChanged("Datatype"); 
     } 
    } 

    /// <summary> 
    /// Initializes a new instance of the <see cref="TDataTypeBinder"/> class. 
    /// </summary> 
    /// <param name="valueToSelect">The value to select.</param> 
    public TDataTypeBinder(string valueToSelect) 
    { 
     Name = valueToSelect; 
    } 


    public event PropertyChangedEventHandler PropertyChanged; 

    private void OnPropertyChanged(string propName) 
    { 
     PropertyChangedEventHandler eh = this.PropertyChanged; 
     if (null != eh) 
     { 
      eh(this, new PropertyChangedEventArgs(propName)); 
     } 
    } 

} 

현재 내가 바인딩 속성을 가지고 :

WorkflowElement에서 XAML을 통해 연결됩니다
public CollectionView DatatypesDisplayed 
    { 
     get 
     { 

      List<TDataTypeBinder> list = new List<TDataTypeBinder>(); 
      list.Add(new TDataTypeBinder("String")); 
      list.Add(new TDataTypeBinder("Float")); 
      list.Add(new TDataTypeBinder("Integer")); 

      myDatatypes = new CollectionView(list); 
      return myDatatypes; 
     } 
    } 

: 나는 그나마

<... WorkflowViewElement ... 
<ComboBox Name="gType" ItemsSource="{Binding Path=ModelItem.DatatypesDisplayed }" DisplayMemberPath="Name" Margin="3" MinWidth="150" Height="20" /> 

내 콤보 박스에있는 걸 얻으십시오 gType. 내가 뭘 잘못 했니? WPF와 Workflow 4.0에 익숙하지 않아서이게 어렵지 않을 것 같아. 조언에

감사합니다, 엘

답변

0

UI를 처음에 당신이 당신의 클래스 '에서 CollectionView을 초기화하는 있습니다 ... 후속 변경 사항이보기에 통보되지 않습니다, 그것은에 결합 할 때 DatatypesDisplayed 컬렉션이 null 인 경우 건설자?

또한

- 당신이보기의 DataContext이 클래스의 인스턴스로 설정하는 퍼펙트 ...

건배, 이안

편집 :

확인 - 그래서를 보라 당신의 콤보를 정의 년대 XAML에서이 라인 :

<ComboBox Name="gType" ItemsSource="{Binding Path=ModelItem.DatatypesDisplayed }" DisplayMemberPath="Name" Margin="3" MinWidth="150" Height="20" /> 

이 콤보 상자에 표시해야 할 '물건'이 collectio에 거주해야 함을 의미 n DataTypesDisplayed라고합니다. 이 객체는 'Name'이라는 속성을 노출하는 한 모든 종류의 객체 컬렉션 일 수 있습니다. 왜냐하면이 객체는 DisplayMemberPath에 사용하기 때문입니다. 또한이 컬렉션은 ModelItem이라는 속성의 속성이어야하며 ModelItem은 그 속성이 무엇이든간에 사용자의 뷰에 대한 DataContext 여야합니다. ...

함께 넣으면 나는 비슷한 것을 볼 수 있습니다. 이 :

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     // Set the View's DataContext to be an instance of the class that contains your CollectionView... 
     this.DataContext = new MainWindowViewModel(); 
    } 
} 


public class MainWindowViewModel 
{ 
    public MainWindowViewModel() 
    { 
    } 

    public object ModelItem { get; set; } 
} 

public class ModelItem 
{ 
    public CollectionView DataTypesDisplayed { get; set; } 
} 

내가 당신이 결합하여 ItemsSource의 경로에 ModelItem이 너무 확실하지 않다, 당신은 당신이 그것을 필요로하지 않을 수도 있습니다 - 단지의 ViewModel에 직접 CollectionView를 배치 ...

+0

감사합니다. 내 CollectionView가 null 초기 값이 아닙니다. WF에서 내 디자이너를 정의 할 때 DataContext를 설정해야합니까? 어떻게 DataContext를 설정할 수 있습니까? – elCapitano

관련 문제