我有一个ListView,其中包含一个TextBlock和一个复选框。
我已将TextBlock绑定到字符串:
<DataTemplate x:DataType="x:String">
//Stuff
<TextBlock Text="{x:Bind}" x:Name="Text">
现在,我还想拥有一个可以切换并绑定到列表的复选框。我无法将布尔值绑定到它。我当前的方式是:切换该框,我可以获取父级,找到一个名为“文本”的东西,获取它的文本,在绑定的ObservableCollection中查找它的索引,这也是我的复选框的索引!可以,但是Binding会更好。有绑定的方法吗?
答案 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。尝试运行代码,您将看到此图像。