2009-11-26 3 views
0

Я хочу отобразить некоторые типы данных в combobox. типы данных завернуты в следующий класс:Активность Сопоставление данных в 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)); 
     } 
    } 

} 

В настоящее время у меня есть свойство для связывания:

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; 
     } 
    } 

, который соединен через XAML в WorkflowElement:

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

Я не получить что-нибудь в моем combobox gType. Что я сделал не так? Я новичок в WPF и Workflow 4.0, поэтому считаю, что это не сложно для вас.

Спасибо советов, эля

ответ

0

Если DatatypesDisplayed коллекция является нулевой, когда UI сначала связывается с ним, то последующие изменения не будут доведены до сведения View ... Вы инициализация CollectionView в своем классе конструктор?

Также - дважды проверьте, что вы настраиваете функции представления DataContext быть экземпляром своего класса ...

Cheers, Ian

EDIT:

OK - так взглянуть на эта линия в XAML, который определяющий ваше выпадающий:

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

это означает, что «материал», который должен появиться в поле со списком должен жить в Collectio n называется DataTypesDisplayed. Это может быть коллекция любых объектов, если этот объект предоставляет свойство «Имя», потому что мы используем это для 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; } 
} 

Я не слишком уверен, почему у вас есть ModelItem в пути вашего ItemsSource Binding, и вы можете обнаружить, что вам не нужно - просто поместите CollectionView непосредственно в ViewModel ...

+0

Благодарим вас за труп. Мой CollectionView не имеет нулевого значения. Должен ли я устанавливать DataContext, когда я определил свой дизайнер в WF? Как я могу установить DataContext? – elCapitano

 Смежные вопросы

  • Нет связанных вопросов^_^