View Full Version : جابه جایی null به string empty
aghayex
دوشنبه 21 اسفند 1391, 00:00 صبح
با سلام
دوستانی که با بایندینگ کار کرده باشن می دونن اگه یک متغیر رو به یک کنترل بایند کنیم و این کنترل رو در زمان اجرا مقدار دهی نکنیم در نهایت به ما مقدار null رو می ده . حالا سوال من اینه اگه بخوایم به جای مقدار null بیاد و مقدار string.empty رو بده باید چکار کنیم ؟
یه عبارت هست که ضد این کار رو می کنه به نام TargetNullValue و کارش به صورت زیر هست :
<TextBox Text="{Binding TargetNullValue={x:Static sys:String.Empty}}"/>
معنی این کد اینه اگه مقدار خالی در تکس باکس بود کنترل عبارت null رو بر می گردونه , حالا من ضد این قضیه رو می خوام . اگه دوستان اطلاع دارن بگن ممنون میشم
مهدی فرزاد
سه شنبه 22 اسفند 1391, 08:01 صبح
سلام
این چیزی که شما گفتید دو طرفه عمل میکنه مثلا اگر من بنویسم
Text="{Binding Test, Mode=TwoWay, TargetNullValue=''}"
اگر پراپرتی null باشه یک استرینگ خالی بر میگردونه و اگر Text خالی باشه Null بر میگردونه
میتونید از Converter هم استفاده کنید در تاپیک های گذشته توضیح داده شده
aghayex
سه شنبه 22 اسفند 1391, 23:12 عصر
تشکر
اما من عکس این حالت رو می خوام یعنی وقتی که تکس null بود بهم مقدار خالی رو بده .
با کانورتور نمی شه چون وقتی تکس من مقدار null باشه اصلا کانورتور عمل نمی کنه . این مشکل رو من طور دیگه حل کرده اومدم در مدل entity که برای دیتابیسم درست کرده بودم تغیراتی دادم به این صورت که اگه مقدار null بود مقدار خالی ثبت بشه .
مهدی فرزاد
چهارشنبه 23 اسفند 1391, 07:43 صبح
شما Converter رو درست تعریف نکردید وگرنه جواب میده درضمن Converter زمانی عمل میکنه که حتما به یک Property بایند شده باشید
aghayex
چهارشنبه 23 اسفند 1391, 19:39 عصر
این کد xaml :
<Window x:Class="w1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:Cont="clr-namespace:Nama.ViewModel.clas" >
<Window.Resources>
<Cont:Date_int x:Key="int_value"/>
</Window.Resources>
<Cont:MaskedTextBox Mask="0000/00/00" Text="{Binding NewPerson.Insert_Date, Mode=TwoWay,Converter={StaticResource int_value}}"/>
</Window>
اینم کد کانورتور
class Date_int : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (System.Convert.ToString(value).Length==8 && value!=null)
{
return (int)value;
}
return "____/__/__";
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (System.Convert.ToString(value).IndexOf("_") == -1 && value != null)
{
return System.Convert.ToInt32(System.Convert.ToString(val ue).Substring(0, 4) + System.Convert.ToString(value).Substring(5, 2) + System.Convert.ToString(value).Substring(8, 2));
}
return 0;
}
}
مهدی فرزاد
شنبه 26 اسفند 1391, 08:10 صبح
خوب تو کد کانورتر کجا نوشتی اگر null بود String.Empty بر گردونه؟!!! یک شرط اضافه کن که اگر null بود چه کار کنه و در قسمتConvertBack هم دقیقا بر عکس قسمت اول عمل کن
درضمن اگر در قسمت اول اگر null بود مقدار null رو برگردونه کد زیر کار خواهد کرد
Text="{Binding Test, Mode=TwoWay, TargetNullValue="____/__/__"}"
aghayex
یک شنبه 27 اسفند 1391, 22:29 عصر
وقتی که تو این کد می گم
if (System.Convert.ToString(value).Length==8 && value!=null)
یعنی اگه null بود مقدار بعد شرط رو برگردون که همون 0 هست ولی عملا وقتی که مقدار کنترل شما null هست کانورتور عمل نمی کنه
مهدی فرزاد
دوشنبه 28 اسفند 1391, 07:43 صبح
شرط شامل این حالت هم میشه که null نباشه و لی کوچتر یا بزرگتر از 8 باشه
پس مستقیم به Null اشاره کنید
اگر null بود این مقدار بر گردون
یا اینکه اگر null بود null رو برگردون که در این حالت کدی که من وشتم کار میکنه
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.