GridView CheckBox绑定

时间:2012-02-08 20:58:58

标签: c# wpf linq-to-sql data-binding

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

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

如果网格视图的“值”字段中的文本为“是”,那么我必须将其更改为“否” 如果网格视图的“值”字段中的文本为“否”,则我必须将其更改为“是”

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

使用双向绑定将更改从UI传输到数据库。将复选框列绑定到SQL表的“值”字段。您将需要一个转换器进行绑定,从Yes / No转换为bool。 http://msdn.microsoft.com/en-us/magazine/cc163299.aspx#S3

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

答案 2 :(得分:0)

执行此操作的最佳方法是将Text块和复选框绑定到数据模型中的相同后端字段,然后使用代码转换器。

这是一个简单的例子。

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

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>

现在请注意,文本块绑定语句包含转换器语句。 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();
    }
}