WP7 / Silverlight如何切换列表中的复选框?

时间:2011-04-18 02:58:15

标签: windows-phone-7 .net-4.0 silverlight-3.0

我在试图解决这个问题时遇到了问题。基本上,我有一个带有复选框的列表框,使其成为“已选中”列表框。

我想要做的是当用户点击按钮时,复选框被切换(显示或隐藏)。

我已尝试将可见性绑定到我的视图模型中的属性,但这不起作用。

正确的方法是什么?我搜索过google和SO,但找不到任何可靠的内容。

感谢。

1 个答案:

答案 0 :(得分:0)

将复选框的可见性绑定到列表中包含的类的属性,该列表是列表框的项目源。

这是一些代码。这是一个快速测试并使用后面的代码,但应该很容易移植到您的视图模型。

类别:

public class CheckString
{
    public Visibility Visibility
    {
        get 
        { 
            Visibility retval = Visibility.Collapsed;
            if (IsChecked)
            {
                retval = Visibility.Visible;
            }
            return retval;
        }
    }
    public bool IsChecked { get; set; }
    public string Description { get; set; }

    public CheckString() {}
}

背后的代码

public partial class MainPage : PhoneApplicationPage
{

    public List<CheckString> CheckStringList { get; set; }

    // Constructor
    public MainPage()
    {
        InitializeComponent();

        SetupList();

        DataContext = this;
    }

    private void SetupList()
    {
        CheckStringList = new List<CheckString>();

        CheckString cs1 = new CheckString { Description = "Test 1"};
        CheckStringList.Add(cs1);

        CheckString cs2 = new CheckString { IsChecked = true, Description = "Test 2" };
        CheckStringList.Add(cs2);

        CheckString cs3 = new CheckString { Description = "Test 3" };
        CheckStringList.Add(cs3);

    }

}

的Xaml

    <ListBox.ItemTemplate>

        <DataTemplate>

            <Grid>

                <Grid.ColumnDefinitions>
                    <ColumnDefinition
                        Width="Auto" />
                    <ColumnDefinition
                        Width="*" />
                </Grid.ColumnDefinitions>

                <CheckBox
                    Grid.Column="0"
                    Visibility="{Binding Visibility}"
                    IsChecked="{Binding IsChecked}" />

                <TextBlock
                    Grid.Column="1"
                    Text="{Binding Description}" />
            </Grid>

        </DataTemplate>

    </ListBox.ItemTemplate>

</ListBox>