2012-02-08 3 views
0

Как изменить значение текстового блока в виде сетки в WPF на основе выбора флажка. Сетка в WPF заполняется из таблицы sql, которая имеет идентификатор и значение в качестве столбцов. Значение здесь ДА или НЕТ. Я использую linq для sql. У меня есть флажок, связанный с каждым идентификатором в виде сетки. Когда пользователь выбирает некоторые строки, я должен сохранить изменения обратно в базу данных.GridView CheckBox binding

Так на основе выбора я должен изменить поле значения в строке таким образом:

Если текст в поле «Значение» в виде сетки является «ДА», то я должен изменить это «НЕТ» Если текст в поле «Значение» в виде сетки является «НЕТ», то я должен изменить его на «YES»

Я могу заполнить данные в GridView, но я Я не уверен, будут ли мои вопросы в приведенном выше сценарии соответствовать WPF и C#.

ответ

0

Лучший способ сделать это, чтобы связать как блок текста и флажок в том же поле в серверной модели данных, а затем использовать конвертеры кода.

Вот простой пример.

Допустим, вы имеете следующую простую модель представления с одним 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}}"

Конвертер здесь очень прост. Он проверяет значение, если оно истинно и возвращает Да, иначе возвращает 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(); 
    } 
} 
0

Вам нужно делать мероприятия. Нажмите на элемент управления и нажмите на молнию жирным шрифтом и сделайте это в коде, указанном в C#. Ключевое слово - это события. OnChanged, Onclicked, onrowchange и т. Д. Находятся внутри этого поля свойств для этого элемента управления, и вы изменяете значение в коде.

0

Используйте двустороннюю привязку для переноса изменений из пользовательского интерфейса в базу данных. Свяжите столбец флажков с полем Значение из таблицы SQL. Вам понадобится конвертер для привязки для преобразования из да/нет в bool. http://msdn.microsoft.com/en-us/magazine/cc163299.aspx#S3

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