繁体   English   中英

mvvm中的组合框绑定

[英]Combo box binding in 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}">
...

这种绑定不起作用,是指当我从树中选择任何对象时,它会填充文本框内的其他信息(如ProcesName),但不会使Folder对象成为组合框中的选定项,但是组合框将被填充。

任何建议。

请参考以下内容:

如果要通过编辑支持以两种方式将ComboBox绑定到folders属性,则应为组合框定义数据模板,然后将FolderInfo类的属性绑定到那些文本框绑定显示成员路径将无法解决您的问题

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

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

这将修复SelectedItem上下文。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM