当我将列表的 SelectedIndex 绑定到属性时,有些东西我无法理解。仅当该属性是此 XAML 页面的 Codebehind 的一部分时才有效
例如:如果我们有 test.xaml 、 test.xaml.cs 和 AppSettings.cs ,则只有当 SelectedIndex 属性绑定到 test.xaml.cs 中的属性时,绑定才能正常工作
经过一些试验,我发现如果我设置 ItemSource 并在 Code-behind 中编写所有绑定的东西,即使属性在 binder.cs 中它也可以工作!
我认为与ItemSource和SelectedItem的顺序有关。
物业守则
private Currency sTileCurrency;
public Currency STileCurrency
{
get
{
return GetValueorDefault<Currency>("STileCurrency", null);
}
set
{
sTileCurrency = value;
if (AddOrUpdateValue("STileCurrency", value))
{
settings.Save();
}
}
}
(这行不通!)
<ListBox Name="sCurrencyLB" Margin="10,0,0,0" Width="Auto" Height="180" ItemsSource="{Binding SCurrencyList}" SelectedItem="{Binding STileCurrency, Source={StaticResource appSettings}, Mode=TwoWay}" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
<TextBlock Name="scountryNametb" Width="50" Text="{Binding code}" VerticalAlignment="Center" HorizontalAlignment="Right"/>
<Image Source="{Binding imgUrl}" Height="50" Width="50" HorizontalAlignment="Left" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
但是,如果我们从 XAML 中删除 SelectedItem 和 ItemSource 并将其设置在 Codebehind 中(这将起作用!)
sCurrencyLB.ItemsSource = Binder.Instance.SCurrencyList;
Binding binding = new Binding();
binding.Mode = BindingMode.TwoWay;
binding.Source = settings;
binding.Path = new PropertyPath("STileCurrency");
sCurrencyLB.SetBinding(ListBox.SelectedItemProperty, binding);
当我尝试在 XAML 中设置 ItemSource 并在 Codebehind 中设置 Binding 时,它也不起作用