簡體   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