mvvm中的组合框绑定

时间:2013-08-27 07:16:22

标签: c# .net wcf silverlight mvvm

我无法找到为什么组合框绑定不起作用?

我有一个看起来像(2个属性)的视图模型

    public ProcessMaintenanceDataObject CurrentProcess
    {
        get
        {
            return _CurrentProcess;
        }
        set
        {
            _CurrentProcess = value;
            OnPropertyChanged("CurrentProcess");
        }
    }

    public ObservableCollection<ProcessMaintenanceDataObject > Processes 
    {
        get
        {
            return _Processes;
        }
        set
        {
            _Processes = value;
            OnPropertyChanged("Processes");
        }
    }

    public ObservableCollection<FolderInfo> Folders
    {
        get
        {
            return _folders;
        }
        set
        {
            _folders = value;
            OnPropertyChanged("Folders");
        }
    }

以下是ProcessMaintenanceDataObject定义

    [DataMember]
    public string ProcessName
    {
        get
        {
            return _ProcessName;
        }
        set
        {
            _ProcessName = value;
            OnPropertyChanged("ProcessName");
        }

    }


    [DataMember]
    public string Id
    {
        get
        {
            return _Id;
        }
        set
        {
            _Id = value;
            OnPropertyChanged("Id");
        }
    }

    [DataMember]
    public string FolderId
    {
        get
        {
            return _FolderId;
        }
        set
        {
            _FolderId = value;
            OnPropertyChanged("FolderId");
        }
    }

    [DataMember]
    public FolderInfo Folder
    {
        get
        {
            return _Folder;
        }
        set
        {
            _Folder = value;
            if (_Folder != null)
                FolderId = _Folder.FolderId;
            OnPropertyChanged("Folder");
        }
    }

FolderInfo类具有FolderName和FolderId属性。

我在viewmodel中有一个方法来填充进程。 在我看来,我有一些类似的结构,我有一个树视图,它将绑定到进程,并在从树视图中选择任何项目时,我需要允许用户编辑该实体。

在视图中,组合框绑定如下:

<ComboBox ItemsSource="{Binding Path=Folders, Mode=OneWay}"
          DisplayMemberPath="FolderName" 
          SelectedItem="{Binding  Source={StaticResource viewModel}, Path=CurrentProcess.Folder, Mode=TwoWay}">
...

这个绑定不起作用我的意思是当我从树中选择任何对象时,它填充textBox中的ProcesName之类的其他信息,但它不会将Folder对象作为组合框中的选定项,但是组合框将是填充。

任何建议。

请参考:

4 个答案:

答案 0 :(得分:0)

如果要以编辑支持的双向模式将ComboBox绑定到文件夹属性, 然后,您应该为组合框定义数据模板,然后将FolderInfo类的属性绑定到这些文本框 绑定显示成员路径不会解决您的问题

答案 1 :(得分:0)

我建议您使用适当的DisplayMemberPath更改DataTemplate

<DataTemplate>
  <StackPanel>
     <TextBlock Text="{Binding FolderName}">
  </StackPanel>
<DataTemplate>

这将修复SelectedItem上下文。

答案 2 :(得分:0)

也许只是,你的Folderinfo类不是notificationObject。如果是这种情况,请确保它实现了INotifyPropertyChange。

答案 3 :(得分:0)

您必须使用SelectedValuePath和SelectedValue而不是如下所示的SelectedItem,

<ComboBox ItemsSource="{Binding Path=Folders, Mode=OneWay}"
          DisplayMemberPath="FolderName"
          SelectedValuePath="FolderId" 
          SelectedValue="{Binding Path=FolderId, Mode=TwoWay}">

SelectedItem绑定整个对象,而SelectedValue仅绑定对象的特定属性。