Combobox显示

badi888 2010-07-20 12:17:42
我想把combobox绑定的数据显示一个初始值 怎么实现
...全文
99 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sunpire 2010-07-21
  • 打赏
  • 举报
回复
冷大神来晚了,LZ已经进行到4楼了,是异步调用未完成就使用了数据源,导致NullReference异常了。

还有冷大神你贴 ComboBox 的源码出来做什么?LZ用的是SL4
jv9 2010-07-21
  • 打赏
  • 举报
回复
参考这里:


<this:ComboBox Name="ProductCategoryComboBox"
ItemsSource="{Binding Source={StaticResource ProductCategories},Path=Data}"
SelectedValue="{Binding Path=CategoryId, Mode=TwoWay}"
ValueMemberPath="Key"
DisplayMemberPath="Value"/>



public class ComboBox : System.Windows.Controls.ComboBox
{
public ComboBox()
{
this.Loaded += new RoutedEventHandler(ComboBox_Loaded);
this.SelectionChanged += new SelectionChangedEventHandler(ComboBox_SelectionChanged);
}

void ComboBox_Loaded(object sender, RoutedEventArgs e)
{
SetSelectionFromValue();
}

private object _selection;

void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count > 0)
{
_selection = e.AddedItems[0];
SelectedValue = GetMemberValue(_selection);
}
else
{
_selection = null;
SelectedValue = null;
}
}

private object GetMemberValue(object item)
{
return item.GetType().GetProperty(ValueMemberPath).GetValue(item, null);
}

public static DependencyProperty ValueMemberPathProperty =
DependencyProperty.Register("ValueMemberPath", typeof(string), typeof(InventoryDemo.ComboBox), null);

public string ValueMemberPath
{
get
{
return ((string)(base.GetValue(ComboBox.ValueMemberPathProperty)));
}
set
{
base.SetValue(ComboBox.ValueMemberPathProperty, value);
}
}

public static DependencyProperty SelectedValueProperty =
DependencyProperty.Register("SelectedValue", typeof(object), typeof(InventoryDemo.ComboBox),
new PropertyMetadata((o, e) =>
{
((ComboBox)o).SetSelectionFromValue();
}));

public object SelectedValue
{
get
{
return ((object)(base.GetValue(ComboBox.SelectedValueProperty)));
}
set
{
base.SetValue(ComboBox.SelectedValueProperty, value);
}
}

private void SetSelectionFromValue()
{
var value = SelectedValue;
if (Items.Count > 0 && value != null)
{
var sel = (from item in Items
where GetMemberValue(item).Equals(value)
select item).Single();
_selection = sel;
SelectedItem = sel;
}
}

protected override void OnItemsChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
base.OnItemsChanged(e);
SetSelectionFromValue();
}
}


badi888 2010-07-21
  • 打赏
  • 举报
回复
果然是异步问题 我在回调函数里完成代码就可以了 谢谢Sunpire不厌的回帖以及冷大神的帮助 以后还要多多向你们学习 希望你们不要厌烦 结贴
badi888 2010-07-20
  • 打赏
  • 举报
回复
我用的是SL4 不过绑定selectedValueProperty没有弄明白,有没有具体代码分享一下
Sunpire 2010-07-20
  • 打赏
  • 举报
回复
Silverlight 4 绑定 SelectedValueProperty 这个依赖项属性即可(前提是绑定的数据类型要和 ItemsSource所使用的SelectedValuePath的数据类型相同)。

Silverlight 3 则只能绑定 SelectedItemProperty ,或是为 SelectedIndex 赋值。
Sunpire 2010-07-20
  • 打赏
  • 举报
回复
在异步操作完成之前, mp.cmbCompany.SelectedIndex 实际上一直等于 -1 ,而
mp.cmbCompany.ItemsSource == null 。

关于异步调用 WCF RIA Services ,
可参考一下 http://topic.csdn.net/u/20100614/10/5409beb9-4813-4e2a-beb5-926690412805.html
中 8楼、11楼、14楼的回复,特别是14楼的。
badi888 2010-07-20
  • 打赏
  • 举报
回复
我如果要是把mp.cmbCompany.SelectIndex=0去掉,Combobox里面有数据,我现在是想让它显示第一条
Sunpire 2010-07-20
  • 打赏
  • 举报
回复
njssdc.Load(njssdc.GetCompaniesQuery()).Entities;
这一步是异步操作,在异步操作完成之前, .Entities 为 null ,肯定不能被访问嘛。

LZ 初学 Silverlight 4 + WCF RIA Services ?
badi888 2010-07-20
  • 打赏
  • 举报
回复
XML
<ComboBox Height="23" Name="cmbCompany" ItemsSource="{Binding}" DisplayMemberPath="CompanyName" SelectedValuePath="CompanyID" SelectedValue="{Binding Path=CompanyID, Mode=TwoWay}" Width="120" HorizontalAlignment="Right" Margin="0,10,20,10" Visibility="Collapsed" Foreground="Green" FontWeight="Bold" FontSize="14" SelectionChanged="cmbCompany_SelectionChanged" />

.cs文件
mp.cmbCompany.ItemsSource = njssdc.Load(njssdc.GetCompaniesQuery()).Entities;
//mp.cmbCompany.DisplayMemberPath = "CompanyName";
mp.cmbCompany.SelectedIndex=0;

不显示抛出异常 请问是怎么回事
Sunpire 2010-07-20
  • 打赏
  • 举报
回复

8,731

社区成员

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

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