![](/img/trans.png)
[英]Binding two objects with Combo Box SelectedItem WPF MVVM (ItemsControl)
[英]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.