我有一个多列组合框。在组合填充之后,我尝试设置默认值,但是我收到此错误消息
对象引用未设置为对象的实例。
这是我的代码
属性
public ObservableCollection<Model_Sedi> Sedi { get; set; } private Model_Sedi _Sedi_Search; public Model_Sedi Sedi_Search { get { return _Sedi_Search; } set { _Sedi_Search = value; OnPropertyChanged("Sedi_Search"); } }
这是XAML
<ComboBox x:Name="Cmb_Sede"
ItemsSource="{Binding Sedi, Mode=TwoWay}"
SelectedValuePath="Value"
SelectedItem="{Binding Sedi_Search, Mode=TwoWay}"
VerticalAlignment="Top" Width="189">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding IdSede, UpdateSourceTrigger=PropertyChanged}"></TextBlock>
<TextBlock Text="{Binding Sede, UpdateSourceTrigger=PropertyChanged}" Padding="10,0,0,0"></TextBlock>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
<ComboBox.Effect>
<DropShadowEffect Color="#FF0A0A0A" Opacity="0.6"/>
</ComboBox.Effect>
</ComboBox>
现在,我该如何设置默认值? (像这样没有用)
Sedi_Search.Sede = "ABC"
Sedi_Search.IdSede = 111
答案 0 :(得分:0)
您需要将Sedi_Search
属性设置为Sedi
集合中的匹配对象。只需使用LINQ:
Sedi_Search = Sedi.SingleOrDefault(x => x.Sede == "ABC" && x.InSede == 111);
另一种写作方式:
Func<Model_Sedi, bool> isMatch = delegate(Model_Sedi x)
{
return x.Sede == "ABC" && x.InSede == 111;
};
Sedi_Search = Sedi.SingleOrDefault(isMatch);
第一个版本只是第二个版本的速记版本。 x
只是委托/ lambda表达式使用的变量名。这个问题可能有用:Linq and lambda expression。
答案 1 :(得分:0)
在XAML和View模型中更改SelectedValuePath="IdSede"
您必须执行Steven Rands is saying.