在 ListView 内显示绑定 ComboBox
Posted
技术标签:
【中文标题】在 ListView 内显示绑定 ComboBox【英文标题】:Display Binding ComboBox Inside ListView 【发布时间】:2022-01-03 09:55:02 【问题描述】:我有一个 JSON,如下图所示:
我在 ListView 中有一个 ComboBox。我想在 ComboBox 中显示“对”。
XAML:
<ListView Name="ListPairOption">
<ListView.ItemTemplate>
<DataTemplate x:DataType="data:PairClass">
<StackPanel
x:Name="pilganStack">
<WebView
x:Name="option"
local:MyProperties.htmlString="Binding Name"/>
</StackPanel>
<ComboBox
x:Name="pairOption"
DisplayMemberPath="NameA"
SelectedValue="Binding ComboBoxClass, Mode=TwoWay"
ItemsSource="x:Bind PilihanS"
PlaceholderText="Pilih" />
</ListView
代码:
try
JsonObject jsonObject = JsonObject.Parse(jsonText);
JsonObject questionObject = jsonObject["EXAM_QUESTION"].GetObject();
ObservableCollection<PairClass> itemL = new ObservableCollection<PairClass>();
JsonArray mapArray = questionObject["map"].GetArray();
foreach (JsonValue mapValue in mapArray)
JsonArray mapArrayI = mapValue.GetArray();
PairClass pair = new PairClass();
foreach (JsonValue mapValueI in mapArrayI)
try
string v = mapValueI.ToString();
pair.Name = v;
itemL.Add(pair);
JsonArray pairArray = questionObject["pairs"].GetArray();
string pairString = "";
foreach (JsonValue pairValue in pairArray)
JsonArray pairArrayI = pairValue.GetArray();
List<ComboBoxClass> PilihanS = new List<ComboBoxClass>();
foreach (JsonValue pairValueI in pairArrayI)
try
var collection = Regex.Matches(v, "\\\"(.*?)\\\"");
foreach (var item in collection)
string v3 = item.ToString().Trim('"');
pairString = v3;
PilihanS.Add(new ComboBoxClass() NameA = pairString );
ListPairOption.ItemsSource = itemL;
对类:
public class PairClass
public string Name get; set;
public ObservableCollection<ComboBoxClass> PilihanS get; set;
public PairClass(string name)
Name = name;
public class ComboBoxClass
public string NameA get; set;
public override string ToString()
return this.NameA;
从上面的代码来看,我没有成功显示到ListView中的ComboBox中,所以ComboBox为空,如下图: 如何将其显示到 ComboBox 中?
【问题讨论】:
【参考方案1】:从上面的代码来看,我没有成功显示到ListView中的ComboBox中,导致ComboBox为空,如下图:
如果你想访问DataType
之外的属性,请使用Binding ElementName=Control Name
然后从父DataContext
访问外部属性。请注意,您需要将当前页面DataContext
设置为此this.DataContext = this;
。它可以确保您可以从DataTemplate
后面的代码中访问PilihanS
。
<ComboBox
x:Name="pairOption"
ItemsSource="Binding DataContext.PilihanS, ElementName=ListPairOption"
PlaceholderText="Pilih" />
背后的代码
public MainPage()
this.InitializeComponent();
this.DataContext = this;
public List<ComboBoxClass> PilihanS get; set; = new List<ComboBoxClass>();
并在List<ComboBoxClass> PilihanS = new List<ComboBoxClass>();
上方的代码中删除这一行
【讨论】:
我试过了,但是 ComboBox 还是空的 请确保 PilihanS 是这样的公共财产。public List<ComboBoxClass> PilihanS get; set; = new List<ComboBoxClass>();
以上是关于在 ListView 内显示绑定 ComboBox的主要内容,如果未能解决你的问题,请参考以下文章
c# WPF listview的一列里面放着combobox 我在后台给combobox加了几个item,现在不显示。
ComboBox在WPF中的绑定示例:绑定项集合转换,及其源代码