将值绑定到列表框项模板(WP8)中的自定义单选按钮

本文关键字:WP8 单选按钮 自定义 绑定 列表 | 更新日期: 2023-09-27 18:17:09

我已经创建了自己的单选按钮,包括如下的索引属性:

public class IndexedRadioButton : RadioButton
{
    public int Index { get; set; }  
}

我在列表框中使用这个自定义单选按钮:

<ListBox Name="myListBox" Grid.Row="1" VerticalAlignment="Top">
                <ListBox.ItemContainerStyle>
                    <Style TargetType="ListBoxItem" >
                        <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
                    </Style>
                </ListBox.ItemContainerStyle>
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <my:IndexedRadioButton Content="{Binding price}" GroupName="myGroup" IsChecked="{Binding isChecked}" Index="{Binding priceIndex}" />
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

现在,我想用值填充这个列表框。

背后的代码:

public MainClass()
    {
        public MainClass()
        {
           InitializeComponent();
           string[] priceList = new string["1","2","3"];
           List<MyClass> myClassList = new List<MyClass>();
           for (int i = 0; i < priceList.Count; i++)
           {
               MyClass listClass = new MyClass()
               {
                   price =  response.priceList[i],
                   priceIndex = i,
                   isChecked = i==0?true:false
               };
               myClassList.Add(listClass);
            }
            myListBox.ItemsSource = myClassList;
        }
        private class MyClass
        {
           public string price {get; set;}
           public int priceIndex {get; set;}
           public bool isChecked { get; set; }
        }
    }

当我运行应用程序,我得到这个错误->>{系统。ArgumentException:值不在预期范围内。}(没有堆栈跟踪信息)

你认为是什么导致了错误?当我在XAML Index="0"中静态地设置一些值到索引时没有问题,但在绑定Index="{Binding priceIndex}"时存在问题。

谢谢,

将值绑定到列表框项模板(WP8)中的自定义单选按钮

为了允许绑定,你必须声明一个依赖属性。试试这个:

public class IndexedRadioButton : RadioButton
{
    public static readonly DependencyProperty IndexProperty = DependencyProperty.Register(
        "Index",
        typeof(int),
        typeof(IndexedRadioButton),
        null);
    public int Index
    {
        get { return (int)GetValue(IndexProperty); }
        set { SetValue(IndexProperty, value); }
    }
}

你可以在这里找到更多信息:

Windows Phone的依赖属性