Jul*_*man 4 wpf combobox data-synchronization
(请参阅下面的我自己的回答,让我在让这个渗透天数和天数后想出来)我试图在WPF中实现以下场景.
我有一个数据网格,显示数据行以供查看和附加数据输入.这是一个新的应用程序,但有遗留数据.
过去的一个特定领域已随机输入数据.现在我们要将该字段的值限制为特定列表.所以我正在使用DataGridComboBoxColumn.FWIW我或者用包含ComboBox的DataGridTemplateColumn尝试了这个.
在运行时,如果现有值不在列表中,我希望它仍然显示.我似乎无法实现这一点.虽然我尝试了大量的解决方案(所有失败),但这里是最合乎逻辑的解决方案.
下拉列表的值列表在名为"months"的Windows资源中定义.
<DataGridComboBoxColumn x:Name="frequencyCombo" MinWidth="100" Header="Frequency"
ItemsSource="{Binding Source={StaticResource months}}"
SelectedValueBinding="{Binding Path=Frequency,UpdateSourceTrigger=PropertyChanged}">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="IsSynchronizedWithCurrentItem" Value="False" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
</DataGridComboBoxColumn>
Run Code Online (Sandbox Code Playgroud)
发生的事情是,如果列表中没有值,则显示为空白.我在运行时验证过IsSynchronizedWithCurrentItem元素确实是False.它只是没有做我期待的事情.
也许我只是走错了路.也许我需要将文本框与组合框结合使用.也许我需要编写一些代码,而不仅仅是XAML.我花了好几个小时尝试不同的事情,并且非常感谢解决方案.我有一些建议使用这个类或那个控件但没有解释如何使用它.
谢谢你!
我终于解决了这个问题.诀窍是摆脱组合框并使用一个模板,该模板具有用于显示的文本框和用于编辑的组合框.但是,我仍然花费了几个小时来解决一个新问题...在组合框中进行选择时,它会修改我在网格中也使用了组合框的任何其他行.猜猜是什么解决了这个问题!我之前尝试使用的IsSynchronizedWithCurrentItem属性.:)
<DataGridTemplateColumn x:Name="frequencyCombo" Header="Frequency">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Frequency}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox
ItemsSource="{Binding Source={StaticResource frequencyViewSource},
TargetNullValue=''}"
SelectedItem="{Binding Path=Frequency}" IsSynchronizedWithCurrentItem="False"
/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)
没有丑陋的黑客.下拉列表底部没有任何不可用的选择.没有代码可以添加这些额外的值然后清理它们.
我不打算删除Mark的建议中的"答案",因为它使我能够将应用程序交到我的客户手中,但这是我正在寻找的解决方案.经过数小时的网络搜索,我发现它被埋在一个" 连接 "项目中.
感谢大家的帮助!