GridView复选框绑定

本文关键字:绑定 复选框 GridView | 更新日期: 2023-09-27 18:24:01

如何根据复选框选择在WPF中更改网格视图中文本块的值。WPF中的网格视图是从一个以ID和Value为列的sql表中填充的。这里的值是YES或NO。我正在使用linq进行sql。我有一个与网格视图中的每个ID相关联的复选框。当用户选择一些行时,我必须将更改保存回数据库。

因此,根据选择,我必须以这种方式更改行中的值字段:

如果网格视图的"Value"字段中的文本为"YES",则我必须将其更改为"NO"如果网格视图的"值"字段中的文本为"否",则我必须将其更改为"是"

我能够将数据填充到网格视图中,但我不确定我在上述场景中的问题是否适合WPF和c#。需要一些指导。

GridView复选框绑定

最好的方法是将Text块和复选框绑定到数据模型中的同一后端字段,然后使用代码转换器。

这里有一个简单的例子。

假设您有以下具有一个布尔属性的简单视图模型:

class SimpleViewModel: INotifyPropertyChanged
{
    private bool _checked;
    // The property to bind to
    public bool Checked
    {
        get { return _checked; }
        set { _checked = value; OnPropertyChanged("Checked");  }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));  
    }
}

这里还有一个简单的页面,其中有一个文本块和一个文本字段,它们都绑定到同一个后端字段。

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication1"
    Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
       <local:SimpleViewModel x:Key="simpleViewModel" />
       <local:BoolToStringConverter x:Key="boolToStringConverter" />
    </Window.Resources>
    <Grid DataContext="{StaticResource simpleViewModel}">
       <StackPanel>
          <TextBlock Text="{Binding Checked, Converter={StaticResource boolToStringConverter}}" />
          <CheckBox Content="something" IsChecked="{Binding Checked}" /> 
       </StackPanel>
    </Grid> 
</Window>

现在请注意,文本块绑定语句包含一个converter语句。Text="{Binding Checked, Converter={StaticResource boolToStringConverter}}"

这里的转换器非常简单。如果值为true,则检查该值并返回Yes,否则返回NO。

public class BoolToStringConverter:IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null) return null; 
        if ((bool)value == true)
            return "YES";
        else
            return "NO";
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        // this scenario is not needed since the text block is read only
        throw new NotImplementedException();
    }
}

您需要执行事件。单击控件并单击闪电粗体,然后在c#中的代码后面进行操作。关键字是events。OnChanged、Onclicked、onrowchange等都在该控件的属性框中,您可以更改代码中的值。

使用双向绑定将更改从UI传输到数据库。将复选框列绑定到SQL表中的"值"字段。绑定需要一个转换器才能从"是/否"转换为布尔。http://msdn.microsoft.com/en-us/magazine/cc163299.aspx#S3

http://msdn.microsoft.com/en-us/library/ms752347.aspx#data_conversion