اتفاقا Binding منبع رو مشخص می کنه اما اینکه کنترل از منبع به چه شکلی استفاده کنه، خودش رو بکار ببره، از اعضاء داخلش استفاده کنه یا کلا اینکه با منبع چطور رفتار کنه رو Binding تعیین نمی کنه.
بله.
بله.
فرقی نمی کنه، Binding صرفا برای ارتباط منبع با مشخصه است، چه با Binding و چه بدون Binding منبع رو برای مشخصه تعیین می کنید.
کاری با DataContext نداره چون کنترل اش کاری با DataContext نداره.
Source رو طراح Binding تعیین می کنه، اگر طراح بخواد Source رو تعیین کنه می کنه، Binding رو خودش داره می نویسه. من یادم نمیاد قاعده ای برای Source تعیین کرده باشیم.
XML:
<ListView>
<ListView.ItemsSource>
<x:Array Type="Color">
<Color>Yellow</Color>
<Color>Magenta</Color>
</x:Array>
</ListView.ItemsSource>
<ListView.Resources>
<Color x:Key="MyColor" R="50" G="100" B="200"/>
</ListView.Resources>
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Width="150" Header="Red" DisplayMemberBinding="{Binding Source={StaticResource MyColor}, Path=R}"/>
<GridViewColumn Width="150" Header="Green" DisplayMemberBinding="{Binding Source={StaticResource MyColor}, Path=G}"/>
<GridViewColumn Width="150" Header="Blue" DisplayMemberBinding="{Binding Source={StaticResource MyColor}, Path=B}"/>
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
چرا دست ما نیست؟ اشتباه ئه. اگر قرار بود منبع رو خودمون تعیین نکنیم که وجود مشخصه لازم نبود.
شما می توانستید تصور کنید که DisplayMemberBinding به چیز دیگری مربوط باشه؟ یک توصیف منطقی دیگری می توانید پیدا کنید که اینطور نباشه؟
GridView برای توصیف ظاهر جدول داخل ListView ئه، اینکه شرح کلی GridView ئه، پس بدیهی ئه که منبع اش محتویات ListView باشه.
جدول هم یکسری ستون ئه، فرضا سه ستون.
که تعداد و عنوان ستون ها معمولا ربطی به تعداد اعضاء اون منبع داده ListView نداره، یعنی به تعداد اعضاء ربطی نداره، برای همین Header معمولا یک مقدار مستقل از اعضاء ئه که برای همه سطر ها مشترک ئه. مثلا FirstName ، مقدار سطرهای جدول هم که DisplayMemberBinding مشخص می کنه به اعضاء اون منبع داده مربوط ئه، چون فرضا اگر منبع داده پنج تا عضو داره، معمولا پنج تا سطر هم در جدول وجود داره.
GridViewColumn هم برای توصیف ستون های اون جدول ئه، DisplayMemberBinding هم عضوی است که باید به عنوان مقدار ردیف های جدول نمایش داده بشه، مثلا Ali و Hasan پس بدیهی ئه که منبع اش اعضاء منبعی باشه که داخل ListView نمایش داده میشه.
اگر اینطور نبود که ظاهر جدول با محتویات ListView رابطه منطقی نداشت.