PDA

View Full Version : bind کردن خاصیت Items یک Combobox



smt1383
چهارشنبه 05 آبان 1389, 22:02 عصر
با سلام خدمت دوستان
من یک Custom control درست کرده ام که از کلاس Combobox ارث بری می کند. داخل این کنترل یک کنترل Combobox قرار داده ام (با کدهای XAML) حال میخواهم خاصیت Items کنترل Combobox را به خاصیت Items کنترل اصلی (Custom Control) متصل کنم. بدین صورت که با اضافه کردن یک آیتم به خاصیت Items کنترل اصلی، به خاصیت Items کنترل Combobox داخل آن هم اضافه شود (همین کار را برای خاصیت BackGround آن بدین صورت انجام داده ام:

Background="{TemplateBinding Background}"
اما برای خاصیت Items نمی دانم به چه صورت عمل کنم. ممنون می شوم دوستان راهنمایی کنند.

smt1383
پنج شنبه 06 آبان 1389, 08:52 صبح
کسی از دوستان نمیتونه کمک کنه؟!!!

رضا عربلو
پنج شنبه 06 آبان 1389, 17:24 عصر
<Binding ElementName="myComboBox" Path="Items"/>

smt1383
پنج شنبه 06 آبان 1389, 18:04 عصر
<Binding ElementName="myComboBox" Path="Items"/>


خیلی ممنون آقای عربلو. ببخشید من هنوز خیلی روی XAML مسلط نیستم. کدهای مربوط به Custom Control که درست کرده ام به صورت زیر است :



<Style TargetType="{x:Type local:BaseComboBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:BaseComboBox}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ComboBox Width="100" Height="Auto" >


</ComboBox>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

اما من متوجه نشدم این کدی که شما نوشتید را به کدام قسمت باید اضافه کنم.
من کد شما را به صورت زیر اضافه کردم :


<Style TargetType="{x:Type local:BaseComboBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:BaseComboBox}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ComboBox Width="100" Height="Auto" ItemsSource="{Binding ElementName=BaseComboBox, Path=Items}" >


</ComboBox>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
اما باز هم جواب نمی دهد. یهنی من وقتی به خاصیت Items کنترل اصلی (Custom Control) آیتمی اضافه می کنم این آیتم به ComboBox داخل آن اضافه نمی شود. ممنون می شوم اگر باز هم راهنمایی کنید

رضا عربلو
جمعه 07 آبان 1389, 10:11 صبح
ItemsSource="{Binding Path=Items}"

را تست کن.

smt1383
جمعه 07 آبان 1389, 11:57 صبح
متأسفانه باز هم جواب نداد. من به BaseComboBox آیتم اضافه میکنم اما آیتمی به ComboBox داخل آن اضافه نمی شود :عصبانی++::عصبانی++:

مهدی فرزاد
جمعه 07 آبان 1389, 13:15 عصر
سلام
ببخشيد يك سئوال اصلا شما چرا يك يوزر كنترل ساختيد كه از كلاس ComboBox ارث ببره؟؟
چه كاري ميخوايد انجام بديد؟؟
بگيد شايد راه بهتري باشه
براي پر كردن comboBox در يك يوزر كنترل راه ديگه هم هست اصلا نياز نيست يوزر كنترل از كلاس ComboBox ارث ببره!!!!!

smt1383
جمعه 07 آبان 1389, 15:26 عصر
من می خواهم یک کلاس پایه از نوع ComboBox داشته باشم (همین BaseComboBox که ساخته ام.) حالا تعدادی CustomComboBox هم بسازم که همگی از کلاس BaseComboBox ارث بری کنند که هر کدام ویژگی های خاص خود را دارند. مثلاً یکی اطلاعات خود را از دیتابیس میگیرد، یکی شکل ظاهری آن تفاوت می کند و ... اما وقتی یک تغییری را در کلاس پایه یعنی BaseComboBox دادم این تغییر در همه فرزندان آن ایجاد شود. مثلاً اگر رنگ متن کنترل اصلی راتغییر دادم، رنگ متن تمام فرزندان آن هم تغییر کند و ...

این کار در برنامه های Win App. به سادگی و بدون مشکل انجام می شود. اما وجود کدهای xaml در پروژه های WPF یه مقدار کار را مشکل کرده است.
راه حل بهتری وجود دارد؟

مهدی فرزاد
شنبه 08 آبان 1389, 07:59 صبح
سلام
در WPF شما بايد از استايل استفاده كنيد
به اين شكل كه شما ميتونيد يك استايل براي كمبو درست كنيد و خصوصيات مورد نظر رو به اون استايل بديد همچنين ميتونيد براي مثال يك براش تعريف كنيد و مثلا رنگ بكگراند تمام اون كمبو ها از اين براش باشه و هر زماني كه رنگ اين براش تغيير كنه رنگ تمام كمبو ها تغيير خواهد كرد

با WPF به سبك winApp كار نكنيد

نيازي به ساخت يوزر كنترل نداريد
درمورد استايل و روش ساخت آن تحقيق كنيد
http://www.barnamenevis.org/forum/showthread.php?t=251604