View Full Version : سوال: bind نشدن
kavayo
جمعه 13 آبان 1401, 08:22 صبح
سلام
من یک فرم دارم که از چندین usercontrol تشکیل شده یکی از این uc ها شامل چندین textbox هست که با کلیک دکمه ای یک پنجره باز میشود و جست و جویی داخل آن انجام میشود حال نتیجه این جست و جو را میخواهم به uc والد برگردونم با mvvm اما انجام نمیشود
SajjadKhati
جمعه 13 آبان 1401, 08:54 صبح
سلام
شما پروژه یا کد های مربوطه را به همراه متن خطا یا هر چیز مورد نظر ، بذارید .
این جوری ، چیزی نمیشه گفت !
kavayo
جمعه 20 آبان 1401, 10:04 صبح
<Window x:Class="Fruit_Shop.Views.BuyingPage"
<uc1:VendorUc x:Name="venuc" DataContext="{Binding Path=vendor,UpdateSourceTrigger=PropertyChanged,Mo de=TwoWay}"></uc1:VendorUc>
define uc...........
<TextBlock HorizontalAlignment="Left" Grid.Column="0" Padding="5,5,5,5" Grid.Row="0" VerticalAlignment="Center" Style="{DynamicResource MaterialDesignTextBlock}" >نام</TextBlock>
<TextBox MinWidth="200" Grid.Column="2" Grid.Row="0" Padding="5,5,5,5" x:Name="txtfname"
Text="{Binding FirstName, Mode=TwoWay}"
HorizontalAlignment="Left" VerticalAlignment="Center" Style="{DynamicResource MaterialDesignTextBox}" ></TextBox>
<Button Content="انتخاب مشتری " Style="{DynamicResource MaterialDesignFlatAccentBgButton}" Margin="20"
Command="{Binding Path=OpenMyWindow}" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2"
CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"></Button>
باز کردن پنجره ی جست جوی کاربر
private void OpenWindowClick(Window obj)
{
SearchVendorPage p = new SearchVendorPage();
p.Show();
}
بستن فرم جست و جو و ارسال اطلاعات به window اصلی
private void closeWindowClick(Window obj)
{
}
SajjadKhati
جمعه 20 آبان 1401, 12:11 عصر
سلام
خوب ، مشکلش چیه؟
شما میتونید توی متد closeWindowClick ، توسط obj ، مقدار پروپرتی Text ئه TextBox (در صورت public یا داشتنِ سطح دسترسی مورد نیاز) در ویندوز دیگه را بخونید .
یا اگه TextBox تون private هست ، میتونید Text ئه TextBox را داخل یه پروپرتی دیگه در همون ویندوز بریزید و در متد closeWindowClick ، اون پروپرتی را بخونید .
البته ، شاید بهتر اش اینه که اگه مشکل Binding ندارید ، در ویندوز اصلی تون ، Binding کنید .
فرضا Text ئه TextBox تون را به پروپرتی ای در BuyingPage تون ، binding کنید .
-----------
command ، مکانیسمی هست برای آپدیت کردن model توسط view (اون هم اغلب ، از ورودی وسیله ها طراحی شده) .
شما در این مسئله تون ، دو ویندوز و user control دارید (از user control ، به ویندوز میخواین داده منتقل کنید) که هر دو ، در لایه ی view هستن . دیگه نیازی به استفاده از command و قوانین mvvm مطرح نیست .
هر چند بدون command ها هم با استفاده از متدها در viewmodel هم میشه این کار را انجام داد و model را توسط view ، آپدیت کرد (کار کرد command ها ، بیشتر در command های غیر دستی (غیر از custom command) هستن که راحت تر عملیات مربوط به ورودی ها مثل copy و اینها را در mvvm پیاده سازی کرد) .
ضمنا ، کدی که اینجا گذاشتید که کامل نیست که بشه از روش نظر بی نقص داد .
فرضا DataContext (کلا Source ئه Binding) ئه پروپرتی Text ئه TextBox ای که دادید ، حداقل تا زمانی که کد xaml اش را در بالا دادید و نوشتید ، معلوم نیست چیه (کد سی شارپ اش هم اگه باشه که ندادید) .
یا فرضا چرا UpdateSourceTrigger برای Binding ئه DataContext ئه VendorUc تعریف شده یا براش 2 طرفه تعیین شده؟
مگه میخواین وقتی DataContext ئه VendorUc تغییر کرد ، پروپرتی vendor هم تغییر کنه که بهش مربوط نمیشه؟
و ... .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.