Привязка GridView CheckBox - PullRequest
       1

Привязка GridView CheckBox

0 голосов
/ 09 февраля 2012

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

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

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

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

Ответы [ 3 ]

0 голосов
/ 09 февраля 2012

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

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

0 голосов
/ 09 февраля 2012

Лучший способ сделать это - связать блок 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}}"

Конвертер здесь очень прост.Он проверяет значение, если оно истинно, и возвращает Да, в противном случае возвращает НЕТ.

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 голосов
/ 09 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...