C# 在组合框中取消激活选择已更改
对于常规的组合框,我将使用以下代码来停用选择更改C# 在组合框中取消激活选择已更改,c#,wpf,C#,Wpf,对于常规的组合框,我将使用以下代码来停用选择更改 <ComboBox Name="CbbTest" SelectionChanged="CbbTest_SelectionChanged"></ComboBox> CbbTest.SelectionChanged -= new SelectionChangedEventHandler(CbbTest_SelectionChanged); 但是,当我的组合框位于DataTemplate中时,我无法按名称访问组合框,因此无
<ComboBox Name="CbbTest" SelectionChanged="CbbTest_SelectionChanged"></ComboBox>
CbbTest.SelectionChanged -= new SelectionChangedEventHandler(CbbTest_SelectionChanged);
但是,当我的组合框位于DataTemplate中时,我无法按名称访问组合框,因此无法关闭已更改的选择。
如何像前面的代码中那样,从下面代码中的数据模板中停用ComboBox CbbTestTwo
<StackPanel>
<DataGrid>
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Name="CbbTestTwo" SelectionChanged="CbbTestTwo_SelectionChanged"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
在这件事上的任何帮助都将不胜感激
请参考以上代码片段中的此链接,一旦您拥有combobox实例,就可以取消订阅该事件 如果我理解正确,您希望能够在SelectionChanged事件中操纵您的组合框。您可以这样获得组合框:
private void cbTest_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox comboBox = new ComboBox();
if(sender is ComboBox)
{
comboBox = (ComboBox)sender;
}
}
现在可以这样处理:
private void cbTest_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox comboBox = new ComboBox();
if(sender is ComboBox)
{
comboBox = (ComboBox)sender;
}
//Add the treatments you want
comboBox.Items.Clear();
comboBox.ItemsSource = listTest;
}
您可能希望使用更类似MVVM的方法,这意味着直接订阅视图代码隐藏中的事件不是最好的选择。在这种情况下,您可以使用这样的行为
public class ComboBoxSelectionChangedBehavior : Behavior<ComboBox>
{
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.SelectionChanged += OnSelectionChanged;
}
private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
// ....
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.SelectionChanged -= OnSelectionChanged;
}
}
然后可以通过xaml附加此行为。下面是一个关于行为的简短教程