【发布时间】:2016-02-22 15:43:12
【问题描述】:
我想我对一些简单的事情有一个奇怪的问题。
我有一个组合框,其中设置了两个绑定 - 一个用于 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");
}
}
它保存并读取设置 OK,初始值显示在组合框下方的文本块中,当我更改所选项目时,文本块被更新,设置被更改并且一切正常 - 除了 on应用启动,选择的项目没有被选中。
感谢您的帮助!
【问题讨论】:
-
你的属性的 getter 应该返回你的 ProgramsCollection 的值,而不是一个新的实例,如果它是空的
-
@Jehof 在初始启动时,它应该为空,因此无论如何它应该返回新的
Program。 -
是的,但新 Programm 不属于您的 ProgrammsCollection。这就是为什么不显示初始值,而是显示之后的原因