Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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# WPF组合框所选项目正在消失_C#_Wpf_Xaml_Combobox - Fatal编程技术网

C# WPF组合框所选项目正在消失

C# WPF组合框所选项目正在消失,c#,wpf,xaml,combobox,C#,Wpf,Xaml,Combobox,我在使用WPF组合框时遇到了一些问题。我的应用程序使用组合框列出要连接的可用IP地址,并在启动时自动填充最后选择的IP地址。因此,当应用程序启动并加载文件时,框显示如下: 单击“连接”按钮时,我的程序将启动另一个程序,然后由我的应用程序最小化。当焦点返回到我的应用程序时,组合框现在为空,如下所示: 起初我的想法是绑定错误(控制台中没有报告任何内容),但事实似乎并非如此。选定项绑定到的属性和选定项本身(在WPF元素上)都有效。我在setter上为属性设置了一个断点,没有异常情况发生。我还有一个

我在使用WPF组合框时遇到了一些问题。我的应用程序使用组合框列出要连接的可用IP地址,并在启动时自动填充最后选择的IP地址。因此,当应用程序启动并加载文件时,框显示如下:

单击“连接”按钮时,我的程序将启动另一个程序,然后由我的应用程序最小化。当焦点返回到我的应用程序时,组合框现在为空,如下所示:

起初我的想法是绑定错误(控制台中没有报告任何内容),但事实似乎并非如此。选定项绑定到的属性和选定项本身(在WPF元素上)都有效。我在setter上为属性设置了一个断点,没有异常情况发生。我还有一个单独的线程,直接从WPF元素每隔0.5秒打印一次所选项目。即使IP地址不再可见,所选项目仍然是“192.168.3.106”

有没有人对可能出现的问题有什么想法。相关代码如下。如果需要更多的信息,请告诉我

XAML:


更有可能的是,您没有覆盖投影仪中的
Equals()
,因此,将使用参照比较,如果选择了
投影仪
实例,则在
投影仪设置中找不到该实例。投影仪
列表中,您将有
组合框显示空白值。@Sinatr我不会直接比较投影仪对象,因此,除非有我不知道的内部比较,我不认为这是问题所在。当然有比较:
ComboBox
不会更改其当前的
SelectedItem
,如果您只更改
ItemsSource
。它将尝试保留它(通过在新的项目集合中执行查找),但由于比较失败,它将显示空白值。我并不是说这会解决您的问题(如果您希望解决问题,请提供),但缺少
Equals()
可能是空
CombBox
@Sinatr的最常见原因之一,尽管如此,我不会更改
ItemsSource
。我正在更改
SelectedProjector
。然而,我确实尝试了实现Equals方法,但没有结果。我将开始处理mcve并在完成后进行更新。更有可能的是,您没有覆盖投影仪中的
Equals()
,因此,将使用参照比较,如果选择了
投影仪
实例,则在
投影仪设置中找不到该实例。投影仪
列表中,您将有
组合框显示空白值。@Sinatr我不会直接比较投影仪对象,因此,除非有我不知道的内部比较,我不认为这是问题所在。当然有比较:
ComboBox
不会更改其当前的
SelectedItem
,如果您只更改
ItemsSource
。它将尝试保留它(通过在新的项目集合中执行查找),但由于比较失败,它将显示空白值。我并不是说这会解决您的问题(如果您希望解决问题,请提供),但缺少
Equals()
可能是空
CombBox
@Sinatr的最常见原因之一,尽管如此,我不会更改
ItemsSource
。我正在更改
SelectedProjector
。然而,我确实尝试了实现Equals方法,但没有结果。我将开始工作的mcve和更新时完成。
<StackPanel Name="Stack">
    <Label Content="Active Projector"/>
    <ComboBox
                    Name="ProjectorComboBox"
                    BorderBrush="DarkGray"
                    Background="Transparent"
                    Width="140" 
                    ToolTip="Select the projector to use." 
                    Loaded="ComboBox_Loaded"
                    ItemsSource="{Binding ProjectorSettings.Projectors}"
                        SelectedItem="{Binding SelectedProjector}">
        <ComboBox.ItemContainerStyle>
            <Style TargetType="{x:Type ComboBoxItem}">
                <Setter Property="ToolTip" Value="{Binding IP}"/>
            </Style>
        </ComboBox.ItemContainerStyle>
    </ComboBox>
</StackPanel>
public Projector SelectedProjector
{
    get
    {
        return _selectedProjector;

    }
    set
    {

        if (value == null)
        {
            System.Windows.Input.Mouse.OverrideCursor = System.Windows.Input.Cursors.Arrow;
            return;
        }

        _selectedProjector = value;
        FirePropertyChanged("SelectedProjector");

        _autoSelectedProjector = false;

        RefreshProjector();

    }
}

public void LaserComboboxLoaded()
{
    var currentProjector = Registry.GetValue("HKEY_CURRENT_USER\\SOFTWARE\\LAP\\LaserProjector\\Settings", "GatewayIP", string.Empty);

    if (currentProjector != null)
    {
        foreach (Projector proj in _projectorSettings.Projectors)
        {
            if (proj.IP == currentProjector as string)
            {
                _selectedProjector = proj;
                FirePropertyChanged("SelectedProjector");

                if (!LaserTool.IsProjecting)
                {
                    _autoSelectedProjector = true;
                }
            }
        }
    }
}