gpt4 book ai didi

c# - ComboBox TwoWay 绑定(bind)不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 16:49:19 24 4
gpt4 key购买 nike

我总是被这些 ComboBox 弄得筋疲力尽。我想我理解他们,但似乎我不理解。

我不想给一个对象一个父对象。所以我得到了这个子对象,它的值是父项的 ID,我有一个父项的集合。

我从 ComboBox 中选择 Parent,如果我理解正确的话,它的 ID 属性应该绑定(bind)到 Child 的 ParentId 属性。看起来不错,当我选择它时,属性就过去了。模板已更改并显示为文本 block ,一切正常。当模板突然返回到 ComboBox 类型时,它变为 Null。它不应该在其 Id 与 ParentId 对应的集合中找到可比较的项目吗?

代码如下:

家长

public class Parent
{
private string _id;
public string Id
{
get
{
return _id;
}
set
{
_id = value;
OnPropertyChanged("Id");
}
}

private string _name;
public string Name
{
get
{
return _name;
}
set
{
_name = value;
OnPropertyChanged("Name");
}
}
}

child

public class RulesMainClassViewModel : ViewModelBase
{
private string _id;
public string Id
{
get
{
return _id;
}
set
{
_id = value;
OnPropertyChanged("Id");
}
}

private string _parentId;
public string ParentId
{
get
{
return _parentId;
}
set
{
_parentId = value;
OnPropertyChanged("ParentId");
}
}

private string _name;
public string Name
{
get
{
return _name;
}
set
{
_name = value;
OnPropertyChanged("Name");
}
}
}

XAML 组合框

<ComboBox DisplayMemberPath="Name" SelectedValue="{Binding Path=ParentId, Mode=TwoWay}" 
SelectedValuePath="Id" ItemsSource="{Binding Path=ParentCollection}" />

最佳答案

不确定你的完整设置是什么样的(而且我真的不能说出你的代码有什么问题)但我试图模拟一些有共同用途的类似东西,我制作了一个 ListView绑定(bind)到具有 NameOccupation 的员工集合。 ComboBox 的目的是更改所选员工的 Occupation,它的 XAML 如下所示:

    <ComboBox ItemsSource="{Binding Occupations}"
SelectedValue="{Binding ElementName=lv,Path=SelectedItem.Occupation}"
SelectedValuePath="{Binding Occupation.Title}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Title}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>

这似乎有效。请注意,我的 SelectedValuePath 是一个绑定(bind),也许这是一个问题...


(类代码:)

public class Employee : INotifyPropertyChanged
{
private string name;
public string Name
{
get { return name; }
set { name = value;
NotifyPropertyChanged("Name");}
}

private Occupation occupation;
public Occupation Occupation
{
get { return occupation; }
set { occupation = value;
NotifyPropertyChanged("Occupation");}
}

public Employee(string name, Occupation occupation)
{
this.name = name;
this.occupation = occupation;
}

#region INotifyPropertyChanged Members
...
#endregion
}

public class Occupation : INotifyPropertyChanged
{
private string title;
public string Title
{
get { return title; }
set { title = value;
NotifyPropertyChanged("Title");}
}

public Occupation(string title)
{ Title = title; }

#region INotifyPropertyChanged Members
...
#endregion
}

关于c# - ComboBox TwoWay 绑定(bind)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4659734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com