0

当我将列表的 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 时,它也不起作用

4

0 回答 0