0

Вот функция из юзер контроля UserControl Class:

public void textBlockFilling(long id)
        {
        var selectedProducts = from p in db.Products
                               where p.ProductID == id
                               select p;

        IEnumerable<TypesOfProduct> type = GetType(id);
        textBlockName.Text = textBlockName.Text.Split(':')[0];
        textBlockName.Text += ": " + selectedProducts.First().ProductName;

}

MainWindow:

 void SearchString_OnSelect(object sender, SelectionChanged e)
        {
            if (e.Value != null)
            {
                Product product = e.Value as Product;
            ProductsView pa = new ProductsView();
            pa.textBlockFilling(product.ProductID);

        }
    }

Ничего не вышло. Увидел другой способ, делаю что-то не так: UC class:

  private delegate void NameCallBack(long varText);
        public void UpdateTextBox(long input)
        {
            db = new ApplicationContext();
        if (!Dispatcher.CheckAccess())
        {
                textBlockName.Dispatcher.BeginInvoke(new NameCallBack(UpdateTextBox), new object[] { input });
        }
        else
        {
            if (db.Products == null) return;
            var selectedProducts = from p in db.Products
                                   where p.ProductID == input
                                   select p;
            textBlockName.Text = textBlockName.Text.Split(':')[0];
            textBlockName.Text =  ": " + selectedProducts.First().ProductName;
        }
    }

И MainWindow :

 public static readonly ProductsView ProductsLogWindow = new ProductsView();
        void SearchString_OnSelect(object sender, SelectionChanged e)
        {
            if (e.Value != null)
            {
                Product product = e.Value as Product;
            ProductsLogWindow.textBlockFilling(product.ProductID);
        }
    }

Не помогло, не понимаю что не так. enter image description here

Что обвел красным - часть где юзер контрол, они меняются по нажатию на радиобаттоны. Вот весь xaml главного окна MainWindow xaml:

<Window x:Class="AppProductAccounting.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:AppProductAccounting.MVVM.View"
        xmlns:viewModel="clr-namespace:AppProductAccounting.MVVM.ViewModel"
        xmlns:controls ="clr-namespace:AppProductAccounting.MVVM.View"
        mc:Ignorable="d"
        Height="600" Width="1120"
        WindowStyle="None"
        ResizeMode="NoResize"
        Background="Transparent"
        AllowsTransparency="True"
        Icon="images\diet.png">
&lt;Window.DataContext&gt;
    &lt;viewModel:MainViewModel/&gt;
&lt;/Window.DataContext&gt;


&lt;Border Background=&quot;#272537&quot;
        CornerRadius=&quot;20&quot;&gt;
    &lt;Grid&gt;

        &lt;Grid.ColumnDefinitions&gt;
            &lt;ColumnDefinition Width=&quot;200&quot;/&gt;
            &lt;ColumnDefinition/&gt;
        &lt;/Grid.ColumnDefinitions&gt;
        &lt;Grid.RowDefinitions&gt;
            &lt;RowDefinition Height=&quot;75&quot;/&gt;
            &lt;RowDefinition/&gt;
        &lt;/Grid.RowDefinitions&gt;
        &lt;Image Source=&quot;Images\diet.png&quot;
            VerticalAlignment=&quot;Center&quot;
                   HorizontalAlignment=&quot;Center&quot;/&gt;
        &lt;StackPanel Grid.Row=&quot;1&quot;&gt;
            &lt;RadioButton Content=&quot;Продукты&quot;
                         Height=&quot;50&quot;
                         Foreground=&quot;White&quot;
                         FontSize=&quot;14&quot;
                         Style=&quot;{StaticResource MenuButtonTheme}&quot;
                         IsChecked=&quot;True&quot;
                         Command=&quot;{Binding ProductsViewCommand}&quot;
                         Checked=&quot;productsButton_Checked&quot;
                         x:Name=&quot;productsButton&quot;
                         /&gt;

            &lt;RadioButton Content=&quot;Рецепты&quot;
                         Height=&quot;50&quot;
                         Foreground=&quot;White&quot;
                         FontSize=&quot;14&quot;
                         Style=&quot;{StaticResource MenuButtonTheme}&quot;
                         Command=&quot;{Binding RecipesViewCommand}&quot;
                         Checked=&quot;recipesButton_Checked&quot;
                         x:Name=&quot;recipesButton&quot;/&gt;

            &lt;RadioButton Content=&quot;Учет продуктов&quot;
                         Height=&quot;50&quot;
                         Foreground=&quot;White&quot;
                         FontSize=&quot;14&quot;
                         Style=&quot;{StaticResource MenuButtonTheme}&quot;
                         Command=&quot;{Binding AccountingViewCommand}&quot;
                         Checked=&quot;productsButton_Checked&quot;
                         x:Name=&quot;accountingButton&quot;/&gt;

            &lt;RadioButton Content=&quot;О программе&quot;
                         Height=&quot;50&quot;
                         Foreground=&quot;White&quot;
                         FontSize=&quot;14&quot;
                         Style=&quot;{StaticResource MenuButtonTheme}&quot;/&gt;

        &lt;/StackPanel&gt;
        &lt;Grid Margin=&quot;70,19,460,516&quot; Grid.Column=&quot;1&quot; Grid.RowSpan=&quot;2&quot;&gt;
            &lt;Grid.RowDefinitions&gt;
                &lt;RowDefinition Height=&quot;30&quot;&gt;&lt;/RowDefinition&gt;
                &lt;RowDefinition Height=&quot;35&quot;&gt;&lt;/RowDefinition&gt;
                &lt;RowDefinition Height=&quot;35&quot;&gt;&lt;/RowDefinition&gt;
                &lt;RowDefinition Height=&quot;35&quot;&gt;&lt;/RowDefinition&gt;
            &lt;/Grid.RowDefinitions&gt;
            &lt;Grid.ColumnDefinitions&gt;
                &lt;ColumnDefinition Width=&quot;100&quot;&gt;&lt;/ColumnDefinition&gt;
                &lt;ColumnDefinition&gt;&lt;/ColumnDefinition&gt;
            &lt;/Grid.ColumnDefinitions&gt;
            &lt;controls:SearchString 
                x:Name=&quot;FString&quot; Grid.ColumnSpan=&quot;2&quot;

                HorizontalAlignment=&quot;Right&quot;
                Height=&quot;30&quot; VerticalAlignment=&quot;Center&quot; Width=&quot;190&quot;
                OnSelect=&quot;SearchString_OnSelect&quot;/&gt;

        &lt;/Grid&gt;
        &lt;Button Height=&quot;25&quot; Width=&quot;25&quot; Grid.Column=&quot;1&quot; Margin=&quot;868,12,0,37&quot; HorizontalAlignment=&quot;Left&quot;&gt;
            &lt;Button.Template&gt;
                &lt;ControlTemplate TargetType=&quot;Button&quot;&gt;
                    &lt;Border x:Name=&quot;Bd&quot; Background=&quot;Transparent&quot;&gt;
                        &lt;Path x:Name=&quot;Pt&quot; Data=&quot;M0,0 M0.2,0.2 L 0.8,0.8 M0.2,0.8 L0.8,0.2 M1,1&quot;
                  Stretch=&quot;Uniform&quot; Stroke=&quot;Black&quot; StrokeThickness=&quot;2&quot;/&gt;
                    &lt;/Border&gt;
                    &lt;ControlTemplate.Triggers&gt;
                        &lt;Trigger Property=&quot;IsMouseOver&quot; Value=&quot;True&quot;&gt;
                            &lt;Setter TargetName=&quot;Bd&quot; Property=&quot;Background&quot; Value=&quot;#22202f&quot;/&gt;
                            &lt;Setter TargetName=&quot;Pt&quot; Property=&quot;Stroke&quot; Value=&quot;White&quot;/&gt;
                        &lt;/Trigger&gt;
                    &lt;/ControlTemplate.Triggers&gt;
                &lt;/ControlTemplate&gt;
            &lt;/Button.Template&gt;
        &lt;/Button&gt;
        &lt;ContentControl Grid.Row=&quot;1&quot;
                        Grid.Column=&quot;1&quot;
                        Margin=&quot;10&quot;
                        Content=&quot;{Binding CurrentView}&quot;
                        /&gt;



    &lt;/Grid&gt;
&lt;/Border&gt;

</Window>

Предложили впихнуть вот это и чутка поправить функцию:

<Window ...>
    <Grid>
        <controls:ProductsView Name="productView"/>
    </Grid>
</Window>

Но начинает выдавать ошибки. Спасайте через 4 часа работу сдавать а я в wpf вообще не шарю

  • Ух как много тут ошибок, а лишних действий. Если это на оценку, то кхм... Ну да ладно, вопрос в чем я не понял? В чем заключается трудность, какие ошибки? Что ожидаете? А то я лично вижу нелепый код, картинку, а также ночто-то идет не так. – EvgeniyZ Jun 22 '22 at 20:45
  • Из mainWindow нужно изменить текстблок, который находится в userControl, я так понимаю проблема в в том, что текстблок приватный. Как это исправлять, да и в целом что с этим делать в wpf - понятия не имею.(Мне лишь бы с виду все оки выглядело и программа работала, на остальное уже пофиг) – Sweeter Jun 22 '22 at 20:50
  • 1
    Нормальный контрол сделайте, с DependencyProperty и привязками, и будет вам счастье (один из примеров). Сейчас у вас каша из фиг пойми чего, с кучей лишнего. Скажем так, вы сами себе злобный буратино, который натворил гадостей и теперь из за этого страдает. – EvgeniyZ Jun 22 '22 at 21:01
  • Ссылки на примеры того что вам нужно выше в синем блоке над вопросом. – aepot Jun 22 '22 at 21:56

0 Answers0