WPF Combobox所选项目消失

时间:2017-02-13 16:25:59

标签: c# wpf xaml combobox

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

Combobox with ip address

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

Empty combobox

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

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

XAML:

<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>

C#:

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;
                }
            }
        }
    }
}

0 个答案:

没有答案