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