WPF中ComboBox绑定问题

ForeverLonely00 2011-12-01 11:40:18

<ComboBox Name="source_language" ItemsSource="{Binding LanguageCollection, Mode=OneWay}"
SelectedValuePath="langID" DisplayMemberPath="showInfo"
SelectedItem="{Binding SourceLang, Mode=TwoWay}" />


绑定值

private LanguageType sourceLang;
public LanguageType SourceLang
{
get { return sourceLang; }
set
{
sourceLang = value;
OnPropertyChanged("SourceLang");
}
}

private ObservableCollection<LanguageType> languageCollection;
public ObservableCollection<LanguageType> LanguageCollection
{
get
{
return languageCollection;
}
set
{
languageCollection = value;
OnPropertyChanged("LanguageCollection");
}
}

初始化值:


sourceLang = new LanguageType();
sourceLang.langID = 1;
sourceLang.showInfo = "中文";
languageCollection = new ObservableCollection<LanguageType>(){
new LanguageType(){langID = 1, showInfo = "中文"},
new LanguageType(){langID = 2, showInfo = "英语"},
};

绑定后,ComboBox确实有了所有的选项,但是select的值为空,没有显示“中文”,这是什么情况?
...全文
247 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
幸福小6 2011-12-06
  • 打赏
  • 举报
回复
因为SourceLang与你Bingding源的数据不是同一份,虽然数据值相同,你试试把SourceLang=languageCollection[0];
ForeverLonely00 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 kuki4552993 的回复:]

引用 7 楼 foreverlonely00 的回复:

绑定后,前台ComboBox选项改变后,绑定的showInfo和langID也确实跟着改变了。唯一的问题是初始显示的值是空的。而不是我想要的DisplaymemberPath的值,求解,,谢谢!!

初始显示的值?你是说ComboBox的选择框里是空白的?是因为这个时候没有选择项啊,你可以尝试在Bidning数据之后comboBo……
[/Quote]
我用的是双向绑定的,我在VM里面的SourceLang已经进行了初始化,按道理应该是会让界面选中的值也是“中文”才对啊
幸福小6 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 foreverlonely00 的回复:]

绑定后,前台ComboBox选项改变后,绑定的showInfo和langID也确实跟着改变了。唯一的问题是初始显示的值是空的。而不是我想要的DisplaymemberPath的值,求解,,谢谢!!
[/Quote]
初始显示的值?你是说ComboBox的选择框里是空白的?是因为这个时候没有选择项啊,你可以尝试在Bidning数据之后comboBox.SelectedIndex = 0;
ForeverLonely00 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 li_qiang_sc 的回复:]

开始绑定的时候是空的,因为绑定数据是异步.
if(source_language.SelectedItem !=null)
{
}
[/Quote]
哦,这个不会吧。如果这样的话,其他绑定的值也会是空的啊。比如我绑定的collection也会是空的才对啊
全国话费充值 2011-12-05
  • 打赏
  • 举报
回复
开始绑定的时候是空的,因为绑定数据是异步.
if(source_language.SelectedItem !=null)
{
}
ForeverLonely00 2011-12-05
  • 打赏
  • 举报
回复
绑定后,前台ComboBox选项改变后,绑定的showInfo和langID也确实跟着改变了。唯一的问题是初始显示的值是空的。而不是我想要的DisplaymemberPath的值,求解,,谢谢!!
ForeverLonely00 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bushiyundeyu 的回复:]

你的绑定方式有问题。参考
http://blog.csdn.net/tcjiaan/article/details/6941601
[/Quote]
绑定方式有多种,不是非得按照它的一模一样写啊。我那种绑定是行的通的,只是某个地方出了问题而已。很感谢你的回答,不过感觉有点敷衍。
ForeverLonely00 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fallincloud 的回复:]

XML code


<ComboBox Name="source_language" ItemsSource="{Binding LanguageCollection, Mode=OneWay}"
SelectedValuePath="langID" DisplayMemberPath="showInf……
[/Quote]
这个行不通吧。。。。ItemTemplate和DisplayMemberPath是不能同时出现的。
全国话费充值 2011-12-03
  • 打赏
  • 举报
回复
string dd=(source_language.SelectedItem as LanguageType).showInfo;
Architecture Net 2011-12-02
  • 打赏
  • 举报
回复
你的绑定方式有问题。参考
http://blog.csdn.net/tcjiaan/article/details/6941601
fallincloud 2011-12-02
  • 打赏
  • 举报
回复


<ComboBox Name="source_language" ItemsSource="{Binding LanguageCollection, Mode=OneWay}"
SelectedValuePath="langID" DisplayMemberPath="showInfo"
SelectedItem="{Binding SourceLang, Mode=TwoWay}" />


去掉SelectedValuePath,
然后改成

<ComboBox Name="source_language" ItemsSource="{Binding LanguageCollection, Mode=OneWay}"
DisplayMemberPath="showInfo"
SelectedItem="{Binding SourceLang, Mode=TwoWay}" >
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=langID}"></TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>

即可
幸福小6 2011-12-02
  • 打赏
  • 举报
回复
看下你建立的数据结构呢....
showInfo是否是一个属性暴露出来的呢?

8,737

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧