Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: C# WPF
Dear All,
I have a field in datacontext as
nvarchar(1)
the values for this field are 'Y' or 'N'
 
I want to bind this field to a checkbox in wpf
 
I have accomplished this task using events but I need to make this on Binding to acheive standard coding style
 
Can You please help me binding a character field to a checkbox.
 
I know boolean can be easily bounded but what about character field.
'Y' for checked
'N' For unchecked.
 
Hope I am making sense.
 
Looking forward to know from you for the help.
 
Regards
Posted 23-Mar-13 8:54am
J imran1.1K
Comments
ThePhantomUpvoter at 23-Mar-13 15:02pm
   
I think you are going to want to bind to a value converter.
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

Create custom CheckBox class with overloaded Checked property.
 
Example for VB.NET:
Custom class definition
Public Class MyCheckBox
    Inherits CheckBox
 
    Public Overloads Property Checked() As String
        Get
            Return BooleanToString(MyBase.Checked)
        End Get
        Set(ByVal value As String)
            MyBase.Checked = StringToBoolean(value)
        End Set
    End Property
 
    Private Function BooleanToString(ByVal b As Boolean) As String
        Return IIf(b, "Y", "N")
    End Function
 
    Private Function StringToBoolean(ByVal s As String) As Boolean
        Return IIf("Y", True, False)
    End Function
 

End Class
 
Usage
        Dim mch As MyCheckBox = New MyCheckBox
        With mch
            .Location = New Point(8, 8)
            .Parent = Me 'this (form)
            .Text = "Check it"
            'add custom event handler
            AddHandler mch.CheckedChanged, AddressOf mcb_CheckedChanged
        End With
 

    Private Sub mcb_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles mcb.CheckedChanged
        Dim oc As MyCheckBox = sender
        Me.Text = oc.Checked.ToString
    End Sub
 
I hope that above code can works for WPF too.
  Permalink  
Comments
Sandeep Mewara at 24-Mar-13 12:26pm
   
Good one. 5.
Maciej Los at 24-Mar-13 12:31pm
   
Thank you, Sandeep ;)
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 2

Hi,
 
You can do this by using a converter. Just like a BoolToVisibilityConverter, you can create a YesNoToBoolConverter. Here's how I would do it:
 
Here's the converter:
public class YesNoToBooleanConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value.ToString() == "Y")
                return true;
            else
                return false;
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value is bool)
            {
                if ((bool)value == true)
                    return "Y";
                else
                    return "N";
            }
            return null;
        }
    }
 

And here's the VM:
public class MainVM: ViewModelBase
 {
     string isChecked;
     public string IsChecked
     {
         get
         {
             return isChecked;
         }
         set
         {
             isChecked = value;
             base.RaisePropertyChanged("IsChecked");
         }
     }
 }
 
And here's the view:
<window x:class="WpfApplication9.MainWindow" xmlns:x="#unknown">
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication9"
        Title="MainWindow" Height="350" Width="525">
    <stackpanel>
        <stackpanel.resources>
            <local:yesnotobooleanconverter x:key="YesNoConverter" xmlns:local="#unknown" />
        </stackpanel.resources>
        <checkbox ischecked="{Binding IsChecked, Converter={StaticResource YesNoConverter}}" />
    </stackpanel>
</window>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = new MainVM() { IsChecked = "N" } ; 
 
        }
    }
 
Basically, the converter intercepts the actual value that was bound to your attribute and return something that is friendly to that attribute or to the view.
 
Here's a good tutorial about value converter:
http://wpftutorial.net/ValueConverters.html
 
Hope this helps Smile | :)
  Permalink  

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 OriginalGriff 349
1 Nirav Prabtani 268
2 Richard Deeming 215
3 CHill60 170
4 _Amy 145
0 OriginalGriff 8,104
1 Sergey Alexandrovich Kryukov 7,067
2 Maciej Los 4,039
3 Peter Leow 3,738
4 CHill60 2,912


Advertise | Privacy | Mobile
Web03 | 2.8.140721.1 | Last Updated 26 Mar 2013
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100