Steve15f Ответов: 2

C# WPF использует привязку с суммой


Для моего программного обеспечения я получаю данные SQL и отображаю их.

Мой XAML с привязкой:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:Plutus" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="Plutus.MainWindow"
    Title="MainWindow" Height="523.725" Width="898" Background="#FF3A3939" WindowStartupLocation="CenterScreen" WindowState="Maximized">
<window.resources>
    
        &lt;Setter Property="Width" Value="35"/>
    

<grid>
    <grid.columndefinitions>
        <ColumnDefinition />
    
    <grid.rowdefinitions>
        <RowDefinition Height="0.03*" />
        <RowDefinition Height="0.04*" />
        <RowDefinition Height="0.04*" />
        <RowDefinition Height="0.88*"/>
        <RowDefinition Height="0.02*" />
    
    
    

    
<ScrollViewer VerticalScrollBarVisibility="Auto" Grid.Row="3" >
    <ItemsControl VerticalAlignment="Top" x:Name="lvDataBinding" HorizontalContentAlignment="Stretch" BorderThickness="0" Margin="10" Grid.Row="3" Background="{x:Null}" ItemsSource="{Binding}" Foreground="White">
        <itemscontrol.itemtemplate>
            <DataTemplate DataType="{x:Type local:CL_Operation}">
                <Border BorderBrush="White" BorderThickness="1" CornerRadius="3" Margin="0,3" Grid.ColumnSpan="0" Background="Transparent" HorizontalAlignment="Left" VerticalAlignment="Top">
                    <Grid Width="{Binding strWidth}" Height="60" Background="Transparent" Margin="0,1">
                        <grid.columndefinitions>
                                <ColumnDefinition Width="0.06*" />
                                <ColumnDefinition Width="0.09*" />
                                <ColumnDefinition Width="0.1*" />
                                <ColumnDefinition Width="0.12*" />
                                <ColumnDefinition Width="0.1*" />
                                <ColumnDefinition Width="0.1*" />
                                <ColumnDefinition Width="0.1*" />
                                <ColumnDefinition Width="0.05*" />
                                <ColumnDefinition Width="0.05*" />
                                <ColumnDefinition Width="0.05*" />
                                <ColumnDefinition Width="0.05*" />
                                <ColumnDefinition Width="0.03*" />
                            
                        <grid.rowdefinitions>
                            <RowDefinition />
                            <RowDefinition />
                            <RowDefinition />
                        
                            <UniformGrid Tag="{Binding strRueck}"  Grid.Column="0" Grid.Row="0" Grid.RowSpan="2" MouseLeftButtonUp="Test" >
                                <uniformgrid.style>
                                    
                                        <Style.Triggers>
                                            &lt;Trigger Property="IsMouseOver" Value="true">
                                                &lt;Setter Property="Background" Value="White"/>
                                            </trigger>
                                            &lt;Trigger Property="IsMouseOver" Value="false">
                                                &lt;Setter Property="Background" Value="{Binding scbBackColor}"/>
                                            </trigger>
                                        </style.Triggers>
                                    
                                
                                <TextBlock Text="{Binding strPriorite}" FontSize="36" Foreground="Red" HorizontalAlignment="Center" VerticalAlignment="Center" FontWeight="Bold"/>
                        
                            <UniformGrid  Grid.Column="0" Grid.Row="2"  Background="{Binding scbBackColor}" MouseLeftButtonUp="Test" >
                                <TextBlock Text="{Binding strSsSect}" FontSize="14" Foreground="Black" HorizontalAlignment="Right" VerticalAlignment="Bottom" FontWeight="Bold" />
                            
                            <UniformGrid  Grid.Column="1" Grid.Row="0" Grid.RowSpan="3">
                            <TextBlock Text="{Binding strRetardAvanceText}" FontSize="28" Foreground="{Binding scbColorRetardAvance}" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center" />
                        
                        <UniformGrid  Grid.Column="2" Grid.Row="0" Grid.ColumnSpan="2" Grid.RowSpan="2">
                            <uniformgrid.style>
                                
                                    <Style.Triggers>
                                        &lt;Trigger Property="IsMouseOver" Value="true">
                                            &lt;Setter Property="Background" Value="Gray"/>
                                        </trigger>
                                    </style.Triggers>
                                
                            
                                <TextBlock Tag="{Binding strRueck}" Foreground="{Binding scbColorNumOfOp}" Text="{Binding strNoOfOp}" FontSize="26" FontWeight="Bold" MouseLeftButtonUp="Test"/>
                        
                        <UniformGrid  Grid.Column="2" Grid.Row="2" Grid.ColumnSpan="3">
                            <TextBlock Text="{Binding strDescriptionOp}" FontSize="14" Foreground="White"/>
                        
                        <UniformGrid Grid.Column="4" Grid.Row="0">
                            <TextBlock Text="{Binding strNoArticle}" FontSize="14" Foreground="White"/>
                        
                        <UniformGrid  Grid.Column="4" Grid.Row="1">
                            <TextBlock Text="{Binding strDateFormatee}" FontSize="14" Foreground="White"/>
                        
                        <UniformGrid Grid.Column="5" Grid.Row="0">
                            <TextBlock Text="{Binding strPcesPoste}" FontSize="14" Foreground="White"/>
                        
                        <UniformGrid  Grid.Column="5" Grid.Row="1">
                            <TextBlock Text="{Binding strTpsPoste}" FontSize="14" Foreground="White"/>
                        
                        <UniformGrid  Grid.Column="6" Grid.Row="0">
                            <TextBlock Text="{Binding strTempsPoste}" FontSize="14" Foreground="White"/>
                        
                        <UniformGrid  Grid.Column="6" Grid.Row="1">
                            <TextBlock Text="{Binding strClient}" FontSize="14" Foreground="White"/>
                        
                        <UniformGrid  Grid.Column="5" Grid.Row="2" Grid.ColumnSpan="3">
                            <TextBlock Text="{Binding strTypeOp}" FontSize="14" Foreground="White"/>
                        
                            <UniformGrid  Grid.Column="9" Grid.Row="3">
                                <TextBlock Text="{Binding strAuart}" FontSize="12" Foreground="White" FontWeight="Bold"/>
                            
                        
                
            
        
        <itemscontrol.itemspanel>
            <itemspaneltemplate>
                <UniformGrid Columns="2"/>


Мой код C#: в моем букле для I sum quantity, и мне нужно отобразить этот результат в моей метке XAML

public partial class MainWindow : Window
{
    public ObservableCollection<cl_operation> lstOperationsTemp = new ObservableCollection<cl_operation>();

    public List<string> lstSelectedLignesChoisi = new List<string>();
    public List<string> lstSelectedIlotsChoisi = new List<string>();
    public List<string> lstPostesTravailChoisi = new List<string>();


    DispatcherTimer dtTimer = new DispatcherTimer();

    DataTable dtOps = new DataTable();
    DataView dvOps = new DataView();

    Thread thrGetList;

    string connectionString = "Data Source=SERVER\\INSTANCE;Initial Catalog=DB;Integrated Security=True";
    string strOrderBy;
    string strResultTri;
    string strWhere;
    string strWhereLigne;
    string strWhereIlot;
    string strWherePosteTravail;

    int iTimer = 30;

    public MainWindow()
    {
        InitializeComponent();

        dtTimer.Tick += new EventHandler(timer_Tick);
        dtTimer.Interval = new TimeSpan(0, 0, 1);
        //dtTimer.Start();

        thrGetList = new Thread(GetList);
        thrGetList.Start();
    }

    public CL_Operation clOp { get; set; }

    public void GetList()
    {
        dvOps = dtOps.DefaultView;

        Application.Current.Dispatcher.Invoke(new Action(() => lstOperationsTemp.Clear()));
        dtOps.Clear();

        string strQueryDatas;

        SqlConnection con = new SqlConnection(connectionString);

        strQueryDatas = "SELECT * FROM [DB].[dbo].[VIEW] " + strWhere + " " + strOrderBy;

        SqlDataAdapter adOps = new SqlDataAdapter(strQueryDatas, con);

        adOps.Dispose();

        try
        {
            con.Open();
            SqlCommand sqlCmd = new SqlCommand(strQueryDatas, con);
            sqlCmd.CommandTimeout = 500;
            adOps.SelectCommand = sqlCmd;
            adOps.Fill(dtOps);
            adOps.Dispose();
            sqlCmd.Dispose();
            con.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

        DateTime dtNow = DateTime.Now;

        double dblTotalQte = 0;
        double dblTotalOp = 0;
        double dblTotalTemps=0;

        for (int i = 0; i < dvOps.Count; i++)
        {
            clOp = new CL_Operation();

            clOp.strWidth = Convert.ToString(Convert.ToInt32(System.Windows.SystemParameters.PrimaryScreenWidth) / 2);

            clOp.strNoOfOp = dvOps[i]["NumOF"].ToString().Trim() + " - " + dvOps[i]["NumOP"].ToString().Trim();
            clOp.strAuart = dvOps[i]["AUART"].ToString().Trim();
            clOp.strMaufnr = dvOps[i]["MAUFNR"].ToString().Trim();
            clOp.strCodeLigne = dvOps[i]["CodeLigne"].ToString().Trim();
            //clOp.strNumOp = dvOps[i]["NumOP"].ToString().Trim();
            clOp.strRueck = dvOps[i]["RUECK"].ToString().Trim();
            clOp.strDescriptionOp = dvOps[i]["DesOpe"].ToString().Trim();
            clOp.strNoArticle = dvOps[i]["NumArt"].ToString().Trim();
            clOp.strDateFormatee = dvOps[i]["DateFormatee"].ToString().Trim();
            clOp.strPcesPoste = Convert.ToString(Convert.ToDouble(String.Format("{0:0}", dvOps[i]["QtePoste"].ToString().Trim()))) + " pces";
            clOp.strTpsPoste = Convert.ToString(Convert.ToDouble(String.Format("{0:0.00}", dvOps[i]["TpsChargePoste"].ToString()))) + " Hrs";
            clOp.strClient = dvOps[i]["NomClientCourt"].ToString().Trim();
            clOp.strTypeOp = dvOps[i]["MAKTX"].ToString();
            clOp.strPriorite = dvOps[i]["PriorOF"].ToString();
            clOp.strSsSect = dvOps[i]["SsSect"].ToString();
            clOp.strDateDerBadge = Convert.ToDateTime(dvOps[i]["DatDerBadg"]);

            // Here i sum my quantity
            dblTotalQte += Convert.ToDouble(dvOps[i]["QtePoste"].ToString().Trim());
            dblTotalTemps += Convert.ToDouble(dvOps[i]["TpsChargePoste"].ToString().Trim());
            dblTotalOp++;

            // I need to display this result in my label
            clOp.strTotaux = "Nb OPs : " + dblTotalOp.ToString() + " Qte totale : " + dblTotalQte.ToString() + " Pces Temps total : " + dblTotalTemps + " Hrs";

            Application.Current.Dispatcher.Invoke(new Action(() => lstOperationsTemp.Add(clOp)));

            DateTime dtRetard = Convert.ToDateTime(clOp.strDateFormatee);
            DateTime dtTempsPoste = Convert.ToDateTime(clOp.strDateDerBadge);
            TimeSpan tRetard = dtNow.Date - dtRetard.Date;
            TimeSpan tTempsPoste = dtNow - dtTempsPoste;

            clOp.strRetardAvanceText = Convert.ToString(Math.Abs(Convert.ToDouble(tRetard.TotalDays))) + " jrs";

            clOp.scbBackColor.Freeze();
            clOp.scbColorRetardAvance.Freeze();

        }

        ObservableCollection<cl_operation> lstOperations = new ObservableCollection<cl_operation>(lstOperationsTemp);

        Application.Current.Dispatcher.Invoke(new Action(() => this.DataContext = lstOperations));

    }

    private void Test(object sender, MouseButtonEventArgs e)
    {
        string str = ((TextBlock)sender).Tag.ToString();

        MessageBox.Show(str);

        foreach (var item in lstOperationsTemp)
        {
            if (item.strRueck == str)
            {
                MessageBox.Show(item.strNoOfOp);
                break;
            }
        }
    }

}


И мой класс (ClassStructure. cs):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data;
using System.Data.SqlClient;

namespace Project
{
    public class CL_Operation
    {
        public string strWidth { get; set; }
        public string strAuart { get; set; }
        public string strMaufnr { get; set; }
        public string strNoOfOp { get; set; }
        public string strRueck { get; set; }
        public string strCodeLigne { get; set; }
        public string strNumOp { get; set; }
        public string strDescriptionOp { get; set; }
        public string strNoArticle { get; set; }
        public string strDateFormatee { get; set; }
        public string strPcesPoste { get; set; }
        public string strTpsPoste { get; set; }
        public string strClient { get; set; }
        public string strTypeOp { get; set; }
        public string strPriorite { get; set; }
        public string strPoste { get; set; }
        public string strSsSect { get; set; }
        public string strTotaux { get; set; }
        public DateTime strDateDerBadge { get; set; }
        public string strTempsPoste { get; set; }
        public string strRetardAvanceText { get; set; }
        public SolidColorBrush scbColorNumOfOp { get; set; }
        public SolidColorBrush scbColorRetardAvance { get; set; }
        public SolidColorBrush scbBackColor { get; set; }
    }

}


В этом классе я создал публичную строку strTotaux.

Мне нужно отобразить эту переменную в моей метке (XAML).

Это работа, мой результат-это дисплей, но это результат моего регистра[0] моего класса clOp, но мне нужна общая сумма..

Что я уже пробовал:

У меня есть попытка с strTotaux, clop.Стртото...

Graeme_Grant

Вам нужно сделать репост, так как это слишком плохо отформатировано и недостающие биты. В редакторе есть выпадающий список кода для выделения типов блоков кода. Используйте их для форматирования.

Пожалуйста, обновите вопрос с четкими и краткими деталями, образцом кода, любыми сообщениями об ошибках (включая внутренние детали исключения) и т. д., нажав на кнопку Улучшить вопрос виджет.

Steve15f

Привет
Ладно, я могу попробовать, мой английский очень плох.

Graeme_Grant

Извините, я не понимаю. Какое поле является суммой и где в XAML должна появиться сумма?

2 Ответов

Рейтинг:
12

Graeme_Grant

Вы привязываетесь к коллекции объектов. Можете ли вы увидеть данные в представлении? Я спрашиваю, поскольку вы используете привязку с ObservableCollection, однако ваш класс не реализует INotifyPropertyChanged[^]. INotifyPropertyChanged требуется, если вы устанавливаете значения в своем объекте класса. Без него система привязки не увидит никаких изменений.

Вам нужно будет сделать что-то вроде этого:

1. Базовый класс для INotifyPropertyChanged

public abstract class ObservableBase : INotifyPropertyChanged
{
    public void Set<TValue>(ref TValue field, TValue newValue, [CallerMemberName] string propertyName = "")
    {
        if (EqualityComparer<TValue>.Default.Equals(field, default(TValue)) || !field.Equals(newValue))
        {
            field = newValue;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

И переделанный класс:
public class CL_Operation : ObservableBase
{
    private string _strWidth;
    public string strWidth
    {
        get => _strWidth;
        set => Set(ref _strWidth, value);
    }
        
    private string _strAuart;
    public string strAuart
    {
        get => _strAuart;
        set => Set(ref _strAuart, value);
    }

    private string _strMaufnr;
    public string strMaufnr
    {
        get => _strMaufnr;
        set => Set(ref _strMaufnr, value);
    }

    private string _strNoOfOp;
    public string strNoOfOp
    {
        get => _strNoOfOp;
        set => Set(ref _strNoOfOp, value);
    }

    private string _strRueck;
    public string strRueck
    {
        get => _strRueck;
        set => Set(ref _strRueck, value);
    }

    private string _strCodeLigne;
    public string strCodeLigne
    {
        get => _strCodeLigne;
        set => Set(ref _strCodeLigne, value);
    }

    private string _strNumOp;
    public string strNumOp
    {
        get => _strNumOp;
        set => Set(ref _strNumOp, value);
    }

    private string _strDescriptionOp;
    public string strDescriptionOp
    {
        get => _strDescriptionOp;
        set => Set(ref _strDescriptionOp, value);
    }

    private string _strNoArticle;
    public string strNoArticle
    {
        get => _strNoArticle;
        set => Set(ref _strNoArticle, value);
    }

    private string _strDateFormatee;
    public string strDateFormatee
    {
        get => _strDateFormatee;
        set => Set(ref _strDateFormatee, value);
    }

    private string _strPcesPoste;
    public string strPcesPoste
    {
        get => _strPcesPoste;
        set => Set(ref _strPcesPoste, value);
    }

    private string _strTpsPoste;
    public string strTpsPoste
    {
        get => _strTpsPoste;
        set => Set(ref _strTpsPoste, value);
    }

    private string _strClient;
    public string strClient
    {
        get => _strClient;
        set => Set(ref _strClient, value);
    }

    private string _strTypeOp;
    public string strTypeOp
    {
        get => _strTypeOp;
        set => Set(ref _strTypeOp, value);
    }

    private string _strPriorite;
    public string strPriorite
    {
        get => _strPriorite;
        set => Set(ref _strPriorite, value);
    }

    private string _strPoste;
    public string strPoste
    {
        get => _strPoste;
        set => Set(ref _strPoste, value);
    }

    private string _strSsSect;
    public string strSsSect
    {
        get => _strSsSect;
        set => Set(ref _strSsSect, value);
    }

    private string _strTotaux;
    public string strTotaux
    {
        get => _strTotaux;
        set => Set(ref _strTotaux, value);
    }

    private DateTime _strDateDerBadge;
    public DateTime strDateDerBadge
    {
        get => _strDateDerBadge;
        set => Set(ref _strDateDerBadge, value);
    }

    private string _strTempsPoste;
    public string strTempsPoste
    {
        get => _strTempsPoste;
        set => Set(ref _strTempsPoste, value);
    }

    private string _strRetardAvanceText;
    public string strRetardAvanceText
    {
        get => _strRetardAvanceText;
        set => Set(ref _strRetardAvanceText, value);
    }

    private SolidColorBrush _scbColorNumOfOp;
    public SolidColorBrush scbColorNumOfOp
    {
        get => _scbColorNumOfOp;
        set => Set(ref _scbColorNumOfOp, value);
    }

    private SolidColorBrush _scbColorRetardAvance;
    public SolidColorBrush scbColorRetardAvance
    {
        get => _scbColorRetardAvance;
        set => Set(ref _scbColorRetardAvance, value);
    }

    private SolidColorBrush _scbBackColor;
    public SolidColorBrush scbBackColor
    {
        get => _scbBackColor;
        set => Set(ref _scbBackColor, value);
    }
}

Обновление: Более Старый Синтаксис C# :
public abstract class ObservableBase : INotifyPropertyChanged
{
    public void Set<TValue>(ref TValue field, TValue newValue, [CallerMemberName] string propertyName = "")
    {
        if (EqualityComparer<TValue>.Default.Equals(field, default(TValue)) || !field.Equals(newValue))
        {
            field = newValue;
			if (PropertyChanged != null)
			{
				PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
			}
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

public class CL_Operation : ObservableBase
{
	private string _strWidth;
	public string strWidth
	{
		get { return _strWidth; }
		set { Set(ref _strWidth, value); }
	}

    private string _strAuart;
    public string strAuart
    {
        get
        {
            return _strAuart;
        }

        set
        {
            Set(ref _strAuart, value);
        }
    }

    private string _strMaufnr;
    public string strMaufnr
    {
        get
        {
            return _strMaufnr;
        }

        set
        {
            Set(ref _strMaufnr, value);
        }
    }

    private string _strNoOfOp;
    public string strNoOfOp
    {
        get
        {
            return _strNoOfOp;
        }

        set
        {
            Set(ref _strNoOfOp, value);
        }
    }

    private string _strRueck;
    public string strRueck
    {
        get
        {
            return _strRueck;
        }

        set
        {
            Set(ref _strRueck, value);
        }
    }

    private string _strCodeLigne;
    public string strCodeLigne
    {
        get
        {
            return _strCodeLigne;
        }

        set
        {
            Set(ref _strCodeLigne, value);
        }
    }

    private string _strNumOp;
    public string strNumOp
    {
        get
        {
            return _strNumOp;
        }

        set
        {
            Set(ref _strNumOp, value);
        }
    }

    private string _strDescriptionOp;
    public string strDescriptionOp
    {
        get
        {
            return _strDescriptionOp;
        }

        set
        {
            Set(ref _strDescriptionOp, value);
        }
    }

    private string _strNoArticle;
    public string strNoArticle
    {
        get
        {
            return _strNoArticle;
        }

        set
        {
            Set(ref _strNoArticle, value);
        }
    }

    private string _strDateFormatee;
    public string strDateFormatee
    {
        get
        {
            return _strDateFormatee;
        }

        set
        {
            Set(ref _strDateFormatee, value);
        }
    }

    private string _strPcesPoste;
    public string strPcesPoste
    {
        get
        {
            return _strPcesPoste;
        }

        set
        {
            Set(ref _strPcesPoste, value);
        }
    }

    private string _strTpsPoste;
    public string strTpsPoste
    {
        get
        {
            return _strTpsPoste;
        }

        set
        {
            Set(ref _strTpsPoste, value);
        }
    }

    private string _strClient;
    public string strClient
    {
        get
        {
            return _strClient;
        }

        set
        {
            Set(ref _strClient, value);
        }
    }

    private string _strTypeOp;
    public string strTypeOp
    {
        get
        {
            return _strTypeOp;
        }

        set
        {
            Set(ref _strTypeOp, value);
        }
    }

    private string _strPriorite;
    public string strPriorite
    {
        get
        {
            return _strPriorite;
        }

        set
        {
            Set(ref _strPriorite, value);
        }
    }

    private string _strPoste;
    public string strPoste
    {
        get
        {
            return _strPoste;
        }

        set
        {
            Set(ref _strPoste, value);
        }
    }

    private string _strSsSect;
    public string strSsSect
    {
        get
        {
            return _strSsSect;
        }

        set
        {
            Set(ref _strSsSect, value);
        }
    }

    private string _strTotaux;
    public string strTotaux
    {
        get
        {
            return _strTotaux;
        }

        set
        {
            Set(ref _strTotaux, value);
        }
    }

    private DateTime _strDateDerBadge;
    public DateTime strDateDerBadge
    {
        get
        {
            return _strDateDerBadge;
        }

        set
        {
            Set(ref _strDateDerBadge, value);
        }
    }

    private string _strTempsPoste;
    public string strTemps


Steve15f

Привет

Спасибо за ваш ответ

У меня есть ошибка на :

Собственность изменена?.Взывать :

Недопустимое выражение ''.
в качестве оператора могут использоваться только выражения присваивания, вызова, инкремента, декремента, ожидания и нового объекта
имя "Invoke" не существует в текущем контексте
Синтаксическая ошибка,': 'ожидаемая

В моем классе у меня есть ошибка :

get => _strWidth;: ошибка при "=>": { или; исключено

Заранее большое вам спасибо.

Graeme_Grant

Если вы посмотрите на мой ответ, я использовал его здесь:

public class CL_Operation : ObservableBase

Steve15f

Здравствуйте, да, это работа :

публичный класс CL_Operation : ObservableBase в порядке.

У меня есть ошибка на

Собственность изменена?.Invoke (this, new PropertyChangedEventArgs(propertyName)); и далее

вам =&ГТ; _strRetardAvanceText;

Спасибо Вам большое, очень большое, очень большое

Graeme_Grant

Я использую современный синтаксис C#.

PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

эквивалентно старшему:
if (PropertyChanged != null)
{
    PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

и для свойств:
private string _strWidth;
public string strWidth
{
    get => _strWidth;
    set => Set(ref _strWidth, value);
}

эквивалентно старшему:
private string _strWidth;
public string strWidth
{
    get { return _strWidth; }
    set { Set(ref _strWidth, value); }
}

Я обновлю ответ с помощью более старого синтаксиса.

Steve15f

Привет

Большое вам спасибо за ваш ответ.

Но, я не понимаю, почему новый синтаксис не работает ? Со старым синтаксисом все в порядке.

Я использую Visual Sutdio 2012, это причина ?

Для моей проблемы : я вижу свои данные в представлении, прежде чем они тоже сработают.

С вашим кодом это быстрее, чем с моим.

Но моя проблема не решена.

В моей метке в XAML с моей привязкой strTotaux это всегда регистр [0] для отображения моего класса CL_Operation, но не сумма

Я вычисляю сумму в своем цикле for :

dblTotalQte += конвертировать.ToDouble(dvOps[i] ["QtePoste"].ToString (). Trim());
dblTotalTemps += конвертировать.ToDouble(dvOps[i] ["TpsChargePoste"].ToString (). Trim());
dblTotalOp++;


цок.strTotaux = "НБ ОПС :" + dblTotalOp.ToString () + "QTE totale :" + dblTotalQte.Метод toString() + "мероприятий pces должны: Темпс итого :" + dblTotalTemps + " ч";

Спасибо.

Graeme_Grant

Да, это было бы причиной. Всегда желательно упомянуть, какая версия .Net Framework и VS если не используется текущая версия VS2017. VS2017 community edition является бесплатной...

Проверьте окно вывода отладки на наличие ошибок привязки. Вы установили DataContext для использования привязки?

Steve15f

Graeme_Grant

Для DataContext у меня нет ничего изменить. Я всегда устанавливаю datacontext :

Приложение.Текущий.Диспетчер.Invoke(new Action (() = & gt; this.DataContext = lstOperations));

В пустоте метод getlist();

У меня нет никаких ошибок привязки

Спасибо

Graeme_Grant

Ваш XML очень трудно читать из-за плохого форматирования и отсутствия битов.

Из того, что я могу понять, вы должны видеть ошибки привязки в окне вывода отладки (как упоминалось выше). Я предполагаю, что привязка ищет не в том месте.

Я бы сделал следующее, Чтобы упростить ваши привязки:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;
    }
}

Тогда, если вы привязываете свою коллекцию к списку, это будет выглядеть примерно так:
<Listbox ItemsSource={Binding CLOperations}/>

где CLOperations имеет тип<coe & gt;ObsetvableCollection< cl_operation>()

Steve15f

Здравствуйте, спасибо.

Я изменил DataContext = this, все в порядке.

В моем XAML я изменяю этот код :
<ItemsControl VerticalAlignment= "Top" x: Name=" lvDataBinding "HorizontalContentAlignment= "Stretch" BorderThickness= " 0 " Margin=" 10 "Grid. Row=" 3 "Background=" {x: Null} "ItemsSource=" {Binding} "Foreground= "White">

по этому кодексу :

<ItemsControl VerticalAlignment= "Top" x: Name=" lvDataBinding "HorizontalContentAlignment= "Stretch" BorderThickness= " 0 " Margin=" 10 "Grid. Row=" 3 "Background=" {x: Null} "ItemsSource=" {Binding CL_Operation} "Foreground= "White">

Но мое представление данных на экране теперь пусто. У меня есть две ошибки привязки :

Система.Окна.Данные ошибка: 40 : BindingExpression путь ошибка: 'собственность CL_Operation' не найден на 'объект' "файл MainWindow' (имя=")'. BindingExpression:путь=CL_Operation; элемента данных='файл MainWindow' (имя="); целевой элемент 'управления ItemsControl' (имя='lvDataBinding'); целевое свойство ', что ItemsSource' (тип 'интерфейс IEnumerable')
Система.Окна.Данные ошибка: 40 : BindingExpression путь ошибка: 'собственность strTotaux' не найден на 'объект' "файл MainWindow' (имя=")'. BindingExpression:путь=strTotaux; элемента данных='файл MainWindow' (имя="); целевой элемент - 'метка' (имя="); целевое свойство объекта 'содержание' ('тип')

Если вам нужно, я могу отправить свой XAML в файле .txt

Graeme_Grant

Если вы чего-то не понимаете, используйте для обучения тестовый проект, а не основной.

Итак, создайте новый проект, используйте простой класс с одним или двумя свойствами, добавьте свойство в код MaindWindow и протестируйте изменение.

Как только вы сможете заставить его работать, обновите свой основной проект.

Steve15f

Я работаю над копией своего проекта. Но я не понимаю, почему это не работает

Я удалил этот DataContext :

Приложение.Текущий.Диспетчер.Invoke(new Action (() = & gt; this.DataContext = lstOperations));

и я заменяю этим :

DataContext = this; в MainWindow()

В моем XAML-код я указать, что ItemsSource="{привязки CL_Operation}" в моем &ЛТ;управления ItemsControl, что ItemsSource="{привязки CL_Operation}"&ГТ;

Теперь у меня нет никаких данных на мой взгляд

Я проверяю, я проверяю, я пытаюсь понять, извините... спасибо за вашу помощь

Graeme_Grant

Я снова обновил свой ответ. Я привел пример того, что я предложил вам сделать.

Steve15f

Большое спасибо

У меня есть ошибка на этот счет :

общественные коллекции ObservableCollection&ЛТ;cl_operation&ГТ; lstOperationsTemp { получить; набор; } = новая коллекция ObservableCollection&ЛТ;cl_operation&ГТ;();

Ошибка 1 недопустимый токен '=' в объявлении членов класса, структуры или интерфейса
Ошибка 1 недопустимый ' ('токен в объявлении членов класса, структуры или интерфейса

Правка: этот код работает :

частная коллекция ObservableCollection&ЛТ;cl_operation&ГТ; _lstOperationsTemp = новая коллекция ObservableCollection&ЛТ;cl_operation&ГТ;();
public ObservableCollection< cl_operation> LstOperationsTemp
{
get { return _lstOperationsTemp; }
набор
{
_lstOperationsTemp = значение;
}
}

в XAML :

< ScrollViewer VerticalScrollBarVisibility=" Auto "Grid. Row= "3" >
<ItemsControl VerticalAlignment= "Top" x: Name=" lvDataBinding "HorizontalContentAlignment= "Stretch" BorderThickness= " 0 " Margin=" 10 "Grid. Row=" 3 "Background=" {x: Null} "ItemsSource=" {Binding LstOperationsTemp} "Foreground= "White">

Это работа, я вижу, что мои данные в моей сетке, но, на мой лейбл, мой strTotaux не показывают :

Steve15f

Привет

Большое вам спасибо

Но это решение создало небольшую новую проблему

Не могли бы вы прочитать мою тему :

https://www.codeproject.com/Questions/1207251/Csharp-WPF-refresh-ecran

Если вы посмотрите эту тему (sum), то увидите мой первый код, с datacontext со списком все в порядке, но теперь мы изменили datacontext с этим спасибо

Graeme_Grant

Да, вам нужно реализовать INotifyPropertyChanged на главном окне:

public partial class MainWindow : Window, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public void RaisePropertyChanged([CallerMemberName] string propertyName = "")
    {
        if (PropertyChanged != null)
	{
	    PropertyChanged.Invoke(this, 
                new PropertyChangedEventArgs(propertyName));
        }
    }

    private string _strTotaux;
    public string strTotaux
    {
        get { return _strTotaux; }
        set { Set(ref _strTotaux, value); }
    }
}

Сейчас было бы самое подходящее время изучить выше MVVM и переместить привязку из кода позади и в ViewModel.

Рейтинг:
0

Steve15f

Как !

Это работа ! Большое вам спасибо Graeme_Grant

Я двинулся

частная строка _strTotaux;
публичная строка strTotaux
{
get { return _strTotaux; }
set { _strTotaux = значение; }
}

В моем главном окне

Спасибо