如何在ComboBox多列中设置默认值?

时间:2015-01-16 16:38:21

标签: c# wpf mvvm combobox multiple-columns

我有一个多列组合框。在组合填充之后,我尝试设置默认值,但是我收到此错误消息

对象引用未设置为对象的实例。

这是我的代码

属性

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

2 个答案:

答案 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.