gpt4 book ai didi

c# - 使用引用的 ItemsSource 绑定(bind)到 SelectedItem

转载 作者:行者123 更新时间:2023-11-30 17:09:43 26 4
gpt4 key购买 nike

简介

我有一个不同数据源的池。我有面具。面具有索引线。每个 Indexline 都有一个来自关联池的数据源:

public class DataSource
{
public string Name { get; set; }

public override string ToString()
{
return Name;
}
}

public class Mask
{
public string Name { get; set; }
public ObservableCollection<Indexline> Indexlines { get; set; }

public override string ToString()
{
return Name;
}
}

public class Indexline
{
public DataSource SelectedDatasource { get; set; }
}

依赖属性

在我的主窗口上,我有一些依赖属性(它们没有什么特别的):

  • 可用数据源 ( ObservableCollection<DataSource> )
  • Ava​​libleMasks ( ObservableCollection<Mask> )
  • 选定掩码 ( Mask )

示例数据

这是我的示例数据,设置在LoadedWindow的事件:

this.AvalibleMasks = new ObservableCollection<Mask>()
{
new Mask()
{
Name = "Search Mask",
Indexlines = new ObservableCollection<Indexline>()
{
new Indexline(),
new Indexline(),
new Indexline(),
new Indexline(),
}
},
new Mask()
{
Name = "Document Mask",
Indexlines = new ObservableCollection<Indexline>()
{
new Indexline(),
new Indexline(),
}
}
};

this.AvalibleDataSources = new ObservableCollection<DataSource>()
{
new DataSource(){Name = "ERP Database"},
new DataSource(){Name = "CRM Database"},
};

XAML

这是我窗口的 xaml 代码:

<Window x:Class="DataSourcesQuestion.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="MainWindow_instance"
Title="MainWindow" Height="372" Width="735" Loaded="Window_Loaded">
<Grid>

<ListBox ItemsSource="{Binding AvalibleMasks}" SelectedItem="{Binding SelectedMask}" Margin="10,10,10,236" />

<DataGrid Margin="10,111,10,43" ItemsSource="{Binding SelectedMask.Indexlines}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Width="500" Header="Selected DataSource">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>

<ComboBox ItemsSource="{Binding AvalibleDataSources,Source={x:Reference MainWindow_instance}}"
SelectedItem="{Binding SelectedDatasource}"/>

</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>

</Grid>
</Window>

我现在在 ListBox 中选择一个掩码, 那么所有的索引都显示在 DataGrid 中.到目前为止一切都很好。当我知道时选择 DataSource来自 ComboBox , 它不会存储到 Indexline 中目的。 (因为当我切换掩码然后切换回来时,选择消失了。而且当我使用调试器时,我可以看到 SelectedDatasourceMask 都是空的)

Image showing the user interface of the code

问题

这种行为的原因是什么?我需要更改什么才能获得预期的结果?


有人可以建议更好的标题吗?我觉得目前的不是很有帮助:(

最佳答案

我找到了原因:

ComboBoxSelectedItem 属性的默认 UpdateSourceTrigger 似乎是 Explicit。将其显式设置为 PropertyChanged 即可解决问题!如此简单!

这就是新的完整 XAML 代码

<Window x:Class="DataSourcesQuestion.MainWindow" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="MainWindow_instance"
Title="MainWindow" Height="372" Width="735" Loaded="Window_Loaded">
<Grid>

<ListBox ItemsSource="{Binding AvalibleMasks}" SelectedItem="{Binding SelectedMask}" Margin="10,10,10,236" />

<DataGrid Margin="10,111,10,43" ItemsSource="{Binding SelectedMask.Indexlines}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Width="500" Header="Selected DataSource">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>

<ComboBox ItemsSource="{Binding AvalibleDataSources,Source={x:Reference MainWindow_instance}}"
SelectedItem="{Binding SelectedDatasource, UpdateSourceTrigger=PropertyChanged}"/>

</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>

</Grid>
</Window>

关于c# - 使用引用的 ItemsSource 绑定(bind)到 SelectedItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12639389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com