سلام
من یک فرم دارم که از چندین usercontrol تشکیل شده یکی از این uc ها شامل چندین textbox هست که با کلیک دکمه ای یک پنجره باز میشود و جست و جویی داخل آن انجام میشود حال نتیجه این جست و جو را میخواهم به uc والد برگردونم با mvvm اما انجام نمیشود
سلام
من یک فرم دارم که از چندین usercontrol تشکیل شده یکی از این uc ها شامل چندین textbox هست که با کلیک دکمه ای یک پنجره باز میشود و جست و جویی داخل آن انجام میشود حال نتیجه این جست و جو را میخواهم به uc والد برگردونم با mvvm اما انجام نمیشود
سلام
شما پروژه یا کد های مربوطه را به همراه متن خطا یا هر چیز مورد نظر ، بذارید .
این جوری ، چیزی نمیشه گفت !
<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)
{
}
سلام
خوب ، مشکلش چیه؟
شما میتونید توی متد 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 هم تغییر کنه که بهش مربوط نمیشه؟
و ... .