绑定字符串和布尔在ListView中?

时间:2018-11-30 23:54:51

标签: c# data-binding uwp

我有一个ListView,其中包含一个TextBlock和一个复选框。

我已将TextBlock绑定到字符串:

<DataTemplate x:DataType="x:String">
//Stuff
        <TextBlock Text="{x:Bind}" x:Name="Text">

现在,我还想拥有一个可以切换并绑定到列表的复选框。我无法将布尔值绑定到它。我当前的方式是:切换该框,我可以获取父级,找到一个名为“文本”的东西,获取它的文本,在绑定的ObservableCollection中查找它的索引,这也是我的复选框的索引!可以,但是Binding会更好。有绑定的方法吗?

1 个答案:

答案 0 :(得分:0)

这很容易,您可以编写一个转换器将字符串转换为bool。

public class StringToBoolConvert : IValueConverter
{
    public string TrueString { get; set; } = "true";

    /// <inheritdoc />
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (TrueString.Equals(value?.ToString()))
        {
            return true;
        }

        return false;
    }

    /// <inheritdoc />
    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotSupportedException();
    }
}

然后您可以将StringToBoolConvert添加到资源中。

<Page.Resources>
    <local:StringToBoolConvert x:Key="StringToBoolConvert" TrueString="1"></local:StringToBoolConvert>
</Page.Resources>

您可以在DataTemplate中使用StringToBoolConvert。

    <ListView ItemsSource="{x:Bind List}">
        <ListView.ItemTemplate >
            <DataTemplate x:DataType="x:String">
                <Grid>
                    <StackPanel>
                        <TextBlock x:Name="Text" Text="{x:Bind}" ></TextBlock>
                        <CheckBox IsChecked="{x:Bind Converter={StaticResource StringToBoolConvert}}"></CheckBox>
                    </StackPanel>

                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

我们编写了一些代码绑定到ListView中。

    public MainPage()
    {
        this.InitializeComponent();
        DataContext = this;
    }

    public ObservableCollection<string> List { get; set; } = new ObservableCollection<string>()
    {
        "1", "2", "3"
    };

然后我们使用StringToBoolConvert并将TrueString的值设置为true,并在选中CheckBox时进行设置。

因为我们将TrueString设置为“ 1”,所以当值是“ 1”时,我们将检查CheckBox。尝试运行代码,您将看到此图像。

enter image description here