Ana içeriğe atla

WPF – RadioButton ve DataBinding

Windows Presentation Foundation (WPF) ile uygulama geliştirenlerin, Windows Form (WF) uygulamalarını geliştirirken alışkın oldukları yöntemlerin bazılarını kullanamadıkları için sorunlar yaşayabiliyorlar. Ancak bu sorunların oluşması WPF 'in yetersizliğinden değildir. Yalnızca WF ile yapılan işlemleri biraz daha farklı olarak WPF üzerinde yapmaları gerekiyor. Çok doğal olarakta bu çözümler uygulama geliştirirek çözülüyor.

Karşılaşılan sorunlardan biri de Radio Button kontrolünü DataBinding ile kullanmak istenildiğinde sorun yaşanıyor. Yazımızda bu sorunun nasıl çözüleceğini incelemeye çalışacağız. Ayrıca bu sorunun çözümlerini global forumlarda araştırdığımızda da en çok karşılaşılan sorunlar arasında olduğunu görürüz.

İlk olarak Visual Studio ortamında (VS2008 yada VS2010 olabilir) yeni bir WPF projesi oluşturuyoruz. Daha sonrasında ise form üzerine iki tane RadioButton kontrolü ekliyoruz ve XAML 'e kod tarafında aşağıdaki değişiklikleri uyguluyoruz.

Window1.xaml
<Grid>
    <RadioButton
        Grid.Row="0"
        Grid.Column="0"
        GroupName="rbGroup"
        Margin="8,0,0,0"
        VerticalAlignment="Center"
        Content="Basarili"
        x:Name="rbSuccess"
        IsChecked="{Binding Path=IsSuccess, Mode=TwoWay, Converter={StaticResource nullableBooleanConverter}}" />
    <RadioButton
        Grid.Row="0"
        Grid.Column="1"
        GroupName="rbGroup"
        Margin="8,0,0,0"
        VerticalAlignment="Center"
        Content="Basarisiz"
        x:Name="rbFailure" /> "
</Grid>

RadioButton kontrolünün seçim işlemi için iki adet özelliği vardır. Bunlar;
  •Checked
  •IsChecked

Checked, seçili olmasını sağlar. IsChecked bool değer dönecek durumlarda kullanılır. Bu da bizim sorunumuzu kısmen çözüyor gibi gözüküyor. Çünkü yukardaki örnekte yapılan işlemler sonucunda başarılı ya da başarısız seçilmesi isteniyor.

XAML kod tarafında kullandığımız özelliklere göz atalım. İki adet radiobutton eklendi. Bunlardan birincisi işlem sonucunda başarılı olduğunu diğeri ise başarısız olduğunu göstermektedir. Dikkat edilmesi gereken noktalardan birincisi ilk radiobutton kontrolünde IsChecked özelliği DataBinding ile beslenirken diğerinde bu işlem yapılmamıştır. Bu sebepten ötürü yalnızca başarılı yazacak olan RadioButton istediğimizi gerçekleyecektir. Diğerinde ise herhangi bir işlem olmayacaktır. Diğer yandan DataBinding işlemini gerçekleyen bölümden nullableBooleadnConverter resource 'ını göreceksiniz. Bu işlem geri dönüş değeri doğru ise 1 yanlış ise 0 dönmesini sağlayacaktır. Bu durumda yapılması gereken ikinci RadioButton kontrolüne de DataBinding 'i eklemek gerekecektir.

Window1.xaml
<Grid>
    <RadioButton
        Grid.Row="1"
        Grid.Column="0"
        GroupName="rbGroupSuccess"
        Margin="8,0,0,0"
        VerticalAlignment="Center"
        Content="Basarili"
        x:Name="rbSuccess"
        IsChecked="{Binding Path=IsSuccess, Mode=TwoWay, Converter={StaticResource nullableBooleanConverter}, ConverterParameter=true}" />

    <RadioButton
        Grid.Row="1"
        Grid.Column="1"
        GroupName="rbGroupFailure"
        Margin="8,0,0,0"
        VerticalAlignment="Center"
        Content="Basarisiz"
        x:Name="rbFailure"
        IsChecked="{Binding Path=IsSuccess, Mode=TwoWay, Converter={StaticResource nullableBooleanConverter}, ConverterParameter=false}" />
</Grid>

XAML kod bloğunda convert işlemi için kullandığımız CS kod.

Window1.xaml.cs
[ValueConversion(typeof(bool?), typeof(bool))]
public class SuccessConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool param = bool.Parse(parameter.ToString());
        if (value == null)
        {
            return false;
        }
        else
        {
            return !((bool)value ^ param);
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool param = bool.Parse(parameter.ToString());
        return !((bool)value ^ param);
    }
}

Yapmış olduğumuz mantıksal işlemleri daha detaylı olarak aşağıda verilen tablodan yararlanabilirsiniz.

value
(IsSuccess)
param result
RadioButton.IsChecked = !(value ^ param)
true true true 
false true false
true false false
false false true

(^ operatörü C# için XOR işlemini gerçekleştirir.)

Umarım yararlı olabilmiştir.

Turhal Temizer

info@turhaltemizer.com

Yorumlar

Bu blogdaki popüler yayınlar

SharePoint 2010 - Content Query for Blog Posts

I hope this post will help many of you feel comfortable with using the Content Query Web Part. In this post I will walk you through the process of creating a content query web part and configuring it to show custom field types. I will also give details on how to use XSLT to stylize and format the data being pulled. I will be using the following scenario as an example. Say that you had a site collection with a top level publishing site. This publishing site would display a the most recent blog posts from all blog sites within its own site collection. To solve this problem we will use a Content Query Web Part and a customized ItemStyle.xsl using XSLT. Please note that the “SharePoint Server Publishing Infrastructure” needs to be enabled at the site collection to display the content query web part. Step 1: Add a Content Query Web Part to Page Navigate to the site that you want the blog posts to show up and click on edit page. Under Editing Tools in the Ribb

.Net 3.5 SP1 – Full Install Packages (Tam Kurulum)

.Net Framework 3.5 SP1 ‘i bilgisayarınıza kurmak istediğinizde normal şartlar altında Microsoft ‘un sitesinde 2.7 mb ‘lik bir dosya indirir ve kurulum işlemlerinizi bu dosya üzerinden yaparsınız. Ancak bu indirmiş oluğunuz dosya yaklaşık 220 mb ‘lik veriyi internetten indirerek kurulum yapmaktadır. İnternet çıkışına izin verilmeyen kurumlar ve kuruluşlar için bu durum bir sıkıntı oluşturmaktadır. Bu sebepten ötürü aşağıdaki link yardımı ile tam yükleme paketini indirdikten sonra hiç internet ihtiyacınız olmadan .Net 3.5 SP1 ‘i kurabilmeniz mümkün olacaktır. Link

Microsoft .Net Framework 3.0 & 3.5 Full Download

.Net ile yazılım geliştiricilerin özelliklede Framework 3.x ile geliştirenlerin başlıca sorunu kurulum dosyası hazırladıklarında .Net Framework ‘ü kurmak için internete bağlanmalarıdır. Çünkü kurulum dosyaları 2-3 MB arasıdır. Yavaş internet kullanıcılarında ve kurumsal şirketlerde projelerin çok ama çok geç kurulmasına sebep olmaktadır. Bu sebepten ötürü sizlere .Net 3.x Framework ‘lerin tam kurulabilir paketlerinin linklerini sizlere sunuyorum. Umarım yararlı olur. Microsoft .NET Framework 3.5 Setup 32-bit version (Boyut(Size): ~200MB Microsoft .NET Framework 3.0 Setup 32-bit Version (Boyut(Size): ~50MB) 64-bit Version (Boyut(Size): ~90MB) Herkese iyi çalışmalar, kolay kurumlar diliyorum. :)