如何根据复选框选择更改WPF中网格视图内的文本块的值。 WPF中的网格视图是从一个sql表填充的,其中ID和Value为columns.Value这里是YES或NO.I我正在使用linq到sql。 我有一个与网格视图中的每个ID相关联的复选框。当用户选择某些行时,我必须将更改保存回数据库。
因此,基于选择,我必须以这种方式更改行中的值字段:
如果网格视图的“值”字段中的文本为“是”,那么我必须将其更改为“否” 如果网格视图的“值”字段中的文本为“否”,则我必须将其更改为“是”
我能够将数据填充到gridview中,但我不确定上述场景中的问题是否适合WPF和c#。需要一些指导。
答案 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();
}
}