【发布时间】:2021-05-01 22:15:52
【问题描述】:
我正在尝试根据行(对象)的单个集合值设置列组合框值,以便每一行具有基于另一个值的不同选项列表。
例如。
第 1 列:国家/地区组合框 - 例如英国选自 { "UK", "USA", "France" }
第 2 列:城市组合框 - 例如LA selected { "New York", "LA", "Texas" }(基于 USA 之前的选择)
下面是我的示例数据对象
public class ExampleData
{
public List<string> countries { get; set; }
public List<string> cities { get; set; }
public string country { get; set; }
public string city { get; set; }
public ExampleData(string country)
{
this.country = country;
countries = new List<string>() { "UK", "USA", "France" };
}
// Example update method to change dependant options
public void UpdateOptions()
{
if (country == "UK")
{
cities = new List<string>() { "London", "Bristol", "Birmingham" };
}
else if (country == "USA")
{
cities = new List<string>() { "New York", "LA", "Texas" };
}
else if (country == "France")
{
cities = new List<string>() { "Paris", "Lyon", "Nice" };
}
else
{
cities = new List<string>();
}
}
}
然后我会创建一个数据的示例集合,以显示在数据网格中
public void TestScenario()
{
ExampleDataCollection = new List<ExampleData>();
exampleDataList.Add(new ExampleData("UK"));
exampleDataList.Add(new ExampleData("USA"));
exampleDataList.Add(new ExampleData("France"));
DataGrid.ItemsSource = ExampleDataCollection ;
}
然后在 xaml 中,我会将对象集合作为 ItemsSource 绑定到数据网格,而每个列组合框将绑定到对象自己的集合,该集合将是每行(对象)独立的。这类似于 ExampleData.countries,其中 ExampleData.Country 是选定的值。
<DataGrid
Name="ExampleDataGrid"
AutoGenerateColumns="False"
ItemsSource="{Binding ExampleDataCollection}"
>
<DataGrid.Columns>
<DataGridComboBoxColumn
Header="country"
ItemsSource="{Binding ExampleData.countries}"
SelectedValueBinding="{Binding ExampleData.country}"
/>
<DataGridComboBoxColumn
Header="city"
ItemsSource="{Binding ExampleData.cities}"
SelectedValueBinding="{Binding ExampleData.city}"
/>
</DataGrid.Columns>
</DataGrid>
这实际上是否可行,或者是否应该将替代方法应用于这种情况?从逻辑上讲,这并不是一个复杂的过程,但是我一直无法实施解决方案。
【问题讨论】: