اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
یک دقیقه
اغلب در حین Bind کردن Propertyها در XAML به مشکل Bind نشدن بر میخوریم. من معمولا از روش زیر استفاده میکنم:
و در XAML :
و حال دو حالت میتواند اتفاق بیفتد :
1 - Break Point Hit نمیشود:
در این حالت مقدار myViewModel خالی (null) است و یا اصلا myViewModel در DataContext مربوط به DataGrid وجود ندارد در این صورت همچنین در پنجره Out Put Visual Studio:
و با search متن "System.Windows.Data Error: 35 : BindingExpression path error:" در Out Put میتوان متوجه آن شد.
2 - Break Point Hit میشود:
در این حالت باید value را Watch کنیم (Shift+F9) تا ببینیم علت Bind نشدن چیست؟ شاید (در این مورد خاص) نوع myViewModel از IEnumerable نباشد ...
در حین بررسی و Debug ، شاید گاهی مسئاله لاینحل به نظر برسد ، ولی به نظر من معمولا با کم و زیاد کردن آدرس (Binding (Path به یکی از دو حالت بالا خواهیم رسید ،
مثلا زمانی که Path به صورت myViewModel.MyProperty.MyInnerPtoperty است ، باید Path را با حالات زیر توسط Converter مذکور تست کنیم:
امیدوارم از Binding تان لذت ببرید.
public class DatabindingDebugConverter : IValueConverter { #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { Debugger.Break(); return value; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { Debugger.Break(); return value; } #endregion IValueConverter Members }
<DataTemplate.Resources> <debug:DatabindingDebugConverter x:Key="databindingDebugConverter"/> </DataTemplate.Resources> <DataGrid ItemsSource="{Binding myViewModel,Converter={StaticResource databindingDebugConverter}}" />
1 - Break Point Hit نمیشود:
در این حالت مقدار myViewModel خالی (null) است و یا اصلا myViewModel در DataContext مربوط به DataGrid وجود ندارد در این صورت همچنین در پنجره Out Put Visual Studio:
System.Windows.Data Error: 35 : BindingExpression path error: ‘X’ property not found ...
2 - Break Point Hit میشود:
در این حالت باید value را Watch کنیم (Shift+F9) تا ببینیم علت Bind نشدن چیست؟ شاید (در این مورد خاص) نوع myViewModel از IEnumerable نباشد ...
در حین بررسی و Debug ، شاید گاهی مسئاله لاینحل به نظر برسد ، ولی به نظر من معمولا با کم و زیاد کردن آدرس (Binding (Path به یکی از دو حالت بالا خواهیم رسید ،
مثلا زمانی که Path به صورت myViewModel.MyProperty.MyInnerPtoperty است ، باید Path را با حالات زیر توسط Converter مذکور تست کنیم:
Binding"{Path=myViewModel.MyProperty.MyInnerPtoperty ,Converter="{StaticResource debugger}}" Binding"{Path=myViewModel.MyProperty,Converter="{StaticResource debugger}}" Binding"{Path=myViewModel,Converter="{StaticResource debugger}}" Binding"{Path=.,Converter="{StaticResource debugger}}"
امیدوارم از Binding تان لذت ببرید.