如何处理查找对象的多个属性,由 ComboBox 的条目引用(如何在 SelectedValuePath 中添加多个条目)?

问题描述 投票:0回答:1

这是我之前关于 C# WPF 解决方案中的 ComboBox

 的问题的后续内容

背景:我有两个班级:

Pallet

CUnit
。我有一个 
Pallet
 对象列表,称为 
ActivePallets
 和一个 
CUnit
,称为 
Unit

我有以下来源(在 XAML 中):

<ComboBox x:Name="Cmb_MPNr" ItemsSource="{Binding ActivePallets}" SelectedValue="{Binding Unit.MPNr, Mode=TwoWay}" SelectedValuePath="MPNr" IsTextSearchEnabled="True" TextSearch.TextPath="MPNr" IsEditable="True"> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding MPNr}"/> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> <TextBox Name="PO" Grid.Row="0" Grid.Column="2" IsEnabled="False"> <TextBox.Text> <MultiBinding StringFormat="{}{0} - {1}"> <Binding Path="SelectedItem.PO" ElementName="Cmb_MPNr" /> <Binding Path="SelectedItem.Description" ElementName = "Cmb_MPNr" /> </MultiBinding> </TextBox.Text> </TextBox>
我(或多或少)明白这意味着什么:

ComboBox

的来源是
ActivePallets
,当选择一个
MPNr
(在
ComboBox
中)时,会找到对应的
CUnit
,并且它的
PO
Description
 显示在 
TextBox
 中。

我遇到的问题是,

Pallet

不是由其
MPNr
唯一定义的,而是由
MPNr
PO
的组合定义的。

我最初的问题被作为重复项关闭,因为我不明白

SelectedItem

不是关键属性(它是
SelectedValue
SelectedValuePath
的组合,但现在我仍然是
的问题) MPNr
PO
将用作输入参数,我不知道该怎么做。

供您参考,在

Pallet
CUnit
类中,
MPNr
PO
的定义方式非常简单:

public int MPNr { get; set; }
public int PO   { get; set; }

最重要的是,

Pallet
CUnit
类甚至没有显式构造函数。

我需要如何修改

Pallet
和/或
CUnit
的定义,以便能够同时使用
MPNr
PO
作为识别的输入参数?

我已经看过这个类似的问题,但我不明白如何在我的情况下应用。

c# xaml combobox binding identification
1个回答
0
投票

我创建了一个解决方法,创建一个新属性,由两个属性的串联组成:

public string MPNrPO { ...}
...
MPNrPO = $"{MPNr}|{PO}";

这不是一个真正的解决方案:我没有理解如何使用两个参数作为输入参数,而是将它们组合成一个参数并使用该参数,但它完成了工作。

关于解决方法的一个非常重要但非常丑陋的评论:

public string MPNrPO {
  get
  {
    return _mPNrPO;
  }
  set
  {
    if (value != null)
    _mPNrPO = value;
    else
    { } // Sometimes MPNrPO gets set to null 
        // (the callstack is meaningless, 
        //  root cause is lack of MVVM knowledge)
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.