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
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
XAML kod bloğunda convert işlemi için kullandığımız CS kod.
Window1.xaml.cs
Yapmış olduğumuz mantıksal işlemleri daha detaylı olarak aşağıda verilen tablodan yararlanabilirsiniz.
(^ operatörü C# için XOR işlemini gerçekleştirir.)
Umarım yararlı olabilmiştir.
Turhal Temizer
info@turhaltemizer.com
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
0 Yorumlar