簡體   English   中英

ComboBox選定的項目綁定不顯示初始值-然后工作正常

[英]ComboBox selected item binding not showing the initial value - then working OK

我想簡單的事情有一個奇怪的問題。 我有一個設置了兩個綁定的組合框-一個用於ItemsSource,另一個用於SelectedItem。
所選項目在首次啟動時不起作用,但隨后工作正常。 輸出沒有指示任何綁定問題,我還設置了具有相同綁定的TextBlock來查看它是否起作用-並且它確實可以。

這是代碼

  <ComboBox IsSynchronizedWithCurrentItem="True" IsEditable="False"
                          Name="ProgramsCollectionComboBox"
                          SelectedItem="{Binding ElementName=ThisUc,
                                                 Path=SelectedProgram}"
                          ItemsSource="{Binding ElementName=ThisUc,
                                                Path=ProgramsCollection}">
                    <ComboBox.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Name}" />
                        </DataTemplate>
                    </ComboBox.ItemTemplate>
                </ComboBox>

                <TextBlock Text="{Binding ElementName=ThisUc, 
                     Path=SelectedProgram.Name, Mode=TwoWay}" />

物業:

        private Program _selectedProgram;
        public Program SelectedProgram
        {
            get
            {
                if (_selectedProgram == null)
                {
                        _selectedProgram = new Program(Settings.Default.SelectedProgramPath);
                }
                return _selectedProgram;

            }
        set
        {
                _selectedProgram = value;
                Settings.Default.SelectedProgramPath = SelectedProgram.PathProgramFolder;
                RaisePropertyChanged("SelectedProgram");
        }
    }

它會保存並讀取設置,確定,初始值顯示在組合框下方的文本框中,當我更改選定的項目,更新文本塊,更改設置且一切正常時-除了在應用啟動時,所選項目未選中。

感謝幫助!

您的初始綁定不起作用有兩個原因。 首先,正如Jehof所提到的那樣,事實是您將SelectedProgram設置為不屬於ProgramsCollection

此外,當您設置SelectedProgram的初始值時,是在getter中進行的,在PropertyChanged方法中不會調用PropertyChanged ,因此綁定將永遠不會意識到該更改。 您可以在getter中初始化PropertyChanged時調用它:

...
get
{
    if (_selectedProgram == null)
    {
        _selectedProgram = _programsCollection?.FirstOrDefault();
        RaisePropertyChanged("SelectedProgram");
    }
    return _selectedProgram;
}
...

甚至更好的是,在私有字段上設置默認值:

private Program _selectedProgram = _programsCollection?.FirstOrDefault();
...

屬性SelectedProgram的getter應該返回ProgrammsCollection的值,如果它為null,則不要返回新實例。

如果該值不是綁定到組合框的集合的一部分,則不顯示該值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM