Активность привязки данных в wf 4.0 - PullRequest
0 голосов
/ 26 ноября 2009

Я хочу отобразить некоторые типы данных в выпадающем списке. типы данных обернуты в следующем классе:

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" />

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

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

1 Ответ

0 голосов
/ 27 ноября 2009

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

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

Ура, Ян

EDIT:

ОК - взгляните на эту строку в xaml, которая определяет ваш комбинированный список:

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

это означает, что «материал», который должен появиться в вашем поле со списком, должен находиться в коллекции под названием 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; }
}

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

...