Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在组合框中取消激活选择已更改_C#_Wpf - Fatal编程技术网

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附加此行为。下面是一个关于行为的简短教程