Значение DataGridTextColumn в зависимости от выбора DataGridComboBoxColumn

203
13 октября 2017, 13:02

Есть DataGrid данные заполняются через биндинг:

<Custom:DataGrid Name="dgMenuProduct" ItemsSource="{Binding Menus}" AutoGenerateColumns="False">
    <Custom:DataGrid.Columns>
        <Custom:DataGridComboBoxColumn x:Name="ColProduct" SelectedValueBinding="{Binding Path=Product}" ItemsSource="{Binding}"
                                       SelectedValuePath="Prod" DisplayMemberPath="Prod" Header="Продукт" Width="4*"/>
        <Custom:DataGridTextColumn Binding="{Binding Path=CenaProd}"  Header="Цена" Width="2*"/>
        <Custom:DataGridCheckBoxColumn Binding="{Binding Path=Subvencia}" Header="Субвенция" Width="2*"/>
        <Custom:DataGridTextColumn IsReadOnly="False" Binding="{Binding Path=KolvoProd}" Header="Количество" Width="2*"/>
        <Custom:DataGridComboBoxColumn x:Name="ColTip" SelectedValueBinding="{Binding Path=TipPP}" ItemsSource="{Binding}" 
                                       SelectedValuePath="Tip" DisplayMemberPath="Tip" Header="Тип" Width="3*"/>
    </Custom:DataGrid.Columns>
</Custom:DataGrid>

Содержимое выпадающего списка берется из файла xml и загружается в класс:

public class ProductPit
{
    public ProductPit(string prod, double cena, string ediz)
    {
        Prod = prod;
        Cena = cena;
        EdIz = ediz;
    }
    public string Prod { get; set; }
    public double Cena { get; set; }
    public string EdIz { get; set; }
}

Сам Datagrid биндится из класса:

public class Menu
{
    public Menu(string product, double cenaprod, bool subvencia, double kolvoprod, string tippp)
    {
        Product = product;
        CenaProd = cenaprod;
        Subvencia = subvencia;
        KolvoProd = kolvoprod;
        TipPP = tippp;
    }
    // Наименование продукта - будет задаваться в DataGridComboBoxColumn, заполненного  List<ProductPit> months
    public string Product { get; set; }
    // Цена продукта - будет задаваться в DataGrid, в соответствии с выбранным продуктом питания
    public double CenaProd { get; set; }
    public bool Subvencia { get; set; }
    // Количество продукта питания - будет задаваться в DataGrid вручную
    public double KolvoProd { get; set; }
    public string TipPP { get; set; }
}

Как сделать так чтобы при выборе значения в выпадающем списке первого столбца, во второй столбец подставлялось соответствующее значение из класса ProductPit?

Answer 1

Вам нужно переопределить сеттер Product в классе Menu:

string product;
public string Product
{
    get => product;
    set
    {
        product = value;
        CenaProd = ProductPits // - это ваша коллекция, содержащая все ProductPit
            .FirstOrDefault(pp => pp.Prod == product)
            .Cena;
    }
}

Хотя, я считаю, более правильным было бы хранить в классе Menu ссылку на конкретный ProductPit, а Product и CenaProd брать уже из него:

public ProductPit ProductPit { get; set; }
public string Product => ProductPit.Prod;
public double CenaProd => ProductPit.Cena;
READ ALSO
Передача значения в PasswordBox из ViewModel C# WPF MVVM

Передача значения в PasswordBox из ViewModel C# WPF MVVM

Здравствуйте! Так как нормального биндинга для PasswordBox не предусмотрено, то пришлось делать биндинг через параметр команды для кнопкиВ итоге...

355
Нет сводки в обозревателе объектов в VS17

Нет сводки в обозревателе объектов в VS17

Пользуюсь Visual Studio 2017В VS есть такая классная вещь, как "сводка" в обозревателе объектов

147
Нужен консольный терминал на c#

Нужен консольный терминал на c#

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

220
Как на C# работать с телеграмм api?

Как на C# работать с телеграмм api?

Пробовал библиотеку TLSharp, но ничего не вышлоНужно

200