C# 绑定到列表视图中的WPF组合框(双向)
我的问题是必须绑定列表视图中嵌入的组合框的选定值。在组合框中显示项目没有问题。然而,我希望我能有一种方法来指定在点击按钮时组合框应该显示什么(从它所包含的项目中)。我想在这个问题上有几个帖子,但是,我不能得到我想要的。这是我的密码 XAML:C# 绑定到列表视图中的WPF组合框(双向),c#,wpf,data-binding,C#,Wpf,Data Binding,我的问题是必须绑定列表视图中嵌入的组合框的选定值。在组合框中显示项目没有问题。然而,我希望我能有一种方法来指定在点击按钮时组合框应该显示什么(从它所包含的项目中)。我想在这个问题上有几个帖子,但是,我不能得到我想要的。这是我的密码 XAML: 点击我! C#代码隐藏: public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); O
点击我!
C#代码隐藏:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
OptionsListView.DataContext = this;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
//Something here that dictates what should be displayed in the combo box
}
List<MyObject> myObjectCollection = new List<MyObject>();
public List<MyObject> MyObjectCollection
{
get
{
myObjectCollection.Add(new MyObject("One"));
myObjectCollection.Add(new MyObject("Two"));
return myObjectCollection;
}
}
}
public class MyObject : INotifyPropertyChanged
{
private string _name;
public MyObject(string name)
{
// TODO: Complete member initialization
this._name = name;
}
public string Name
{
get
{
return _name;
}
}
string selectedType = string.Empty;
public string SelectedType
{
get
{
return selectedType;
}
set
{
selectedType = value;
this.NotifyChange("SelectedType");
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyChange(params object[] properties)
{
if (PropertyChanged != null)
{
foreach (string p in properties)
{
PropertyChanged(this, new PropertyChangedEventArgs(p));
}
}
}
#endregion
}
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
optionListView.DataContext=此;
}
私有无效按钮\u单击(对象发送者,路由目标e)
{
//这里的内容指示组合框中应显示的内容
}
List myObjectCollection=new List();
公共列表MyObject集合
{
得到
{
添加(新的MyObject(“一”);
添加(新的MyObject(“两”);
返回myObjectCollection;
}
}
}
公共类MyObject:INotifyPropertyChanged
{
私有字符串\u名称;
公共MyObject(字符串名称)
{
//TODO:完成成员初始化
这个。_name=name;
}
公共字符串名
{
得到
{
返回_name;
}
}
string selectedType=string.Empty;
公共字符串选择类型
{
得到
{
返回所选类型;
}
设置
{
selectedType=值;
此.NotifyChange(“SelectedType”);
}
}
#区域INotifyProperty更改成员
公共事件属性更改事件处理程序属性更改;
私有void NotifyChange(参数对象[]属性)
{
if(PropertyChanged!=null)
{
foreach(属性中的字符串p)
{
房地产变更(这是新的房地产变更发展(p));
}
}
}
#端区
}
如果有人能帮我解决这个问题,我会很高兴的
谢谢
拉姆我不确定我是否误解了你的问题。我认为你的问题是关于参考问题。我对你的代码做了一点修改,点击按钮就可以了 请参阅下面的代码 XAML:
C#代码:
private Collection sources=new Collection(){“ABC”、“DEF”、“XYZ”};
公共集合源{get{return Sources;}}
私有无效按钮\u单击(对象发送者,路由目标e)
{
myObjectCollection[0]。SelectedType=源[0];
myObjectCollection[1]。SelectedType=源[2];
}
怎么样
foreach (ComboBox c in OptionsListView.Items)
{
c.SelectedValue = "Put your value here";
}
这应该可以完成这项工作,如果您的内部有组合框以外的其他对象,则可以添加
if (c is ComboBox)
为确保您使用的对象正确非常感谢Howard。。它现在工作得很好!显然,我一直试图用一个没有绑定到它的值来设置combobox。现在,当我指定(正如您所建议的)一个要绑定到组合框的集合时,它就像魅力一样工作!我说得对吗?是否使用ItemSource将数据绑定到组合框是这里的关键?谢谢!嗨,大马士革,我不认为你的建议有效。My listview绑定到MyObject的集合,因此foreach在optionListView.Items中看不到组合框。它只看到MyObject类型的项,这正是我的问题所在。幸运的是,霍华德的建议起了作用!无论如何,非常感谢您对这个问题的快速思考。我觉得奇怪的是,这不起作用
ListView.Item
为您提供一个ItemCollection
,其中包含列表中显示的所有可视控件(即此处的组合框),如果您希望列表中包含MyObject
,您应该使用属性ItemsSource
。不管怎样,希望我能帮上忙
private Collection<string> sources = new Collection<string>() { "ABC", "DEF", "XYZ" };
public Collection<string> Sources { get { return sources; } }
private void Button_Click(object sender, RoutedEventArgs e)
{
myObjectCollection[0].SelectedType = Sources[0];
myObjectCollection[1].SelectedType = Sources[2];
}
foreach (ComboBox c in OptionsListView.Items)
{
c.SelectedValue = "Put your value here";
}
if (c is ComboBox)