[英]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.