【问题标题】:Bind string and bool in a ListView?在 ListView 中绑定字符串和布尔值?
【发布时间】:2019-05-03 03:17:15
【问题描述】:

我有一个包含 TextBlock 和 Checkbox 的 ListView。

我已将 TextBlock 绑定到一个字符串:

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

现在我还想要一个可以切换并绑定到列表的复选框。我无法将布尔值绑定到它。我目前的方法是:我切换框,我可以得到父,找到一个叫做“文本”的东西,得到它的文本,在绑定的 ObservableCollection 中查找它的索引,它也是我的复选框的索引!那行得通,但绑定会更好。有没有办法通过绑定来做到这一点??

【问题讨论】:

    标签: c# data-binding uwp


    【解决方案1】:

    很简单,你可以编写一个转换器将字符串转换为布尔值。

    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。尝试运行代码,您将看到此图像。

    【讨论】:

      猜你喜欢
      • 2012-08-10
      • 2019-10-15
      • 2021-08-30
      • 2012-03-06
      • 2019-02-22
      • 2011-01-27
      • 2017-11-17
      • 2015-08-19
      • 2011-08-05
      相关资源
      最近更新 更多