列表框绑定在测试配置中不起作用



我在绑定列表框时遇到了麻烦,我无法弄清楚什么问题。在大多数情况下,它可以正常工作,但是在我的应用程序中使用的特殊测试配置不起作用,这使我发疯。我从字面上盯着它几个小时,尝试了各种各样的事情。这是一个具有约束力的问题,但我找不到。我可以看到没有任何例外或绑定错误。

测试配置与我的调试配置相同,但具有附加的汇编符号。它使我可以在不运行整个软件堆栈的情况下测试WPF应用程序。这是所有意图和目的的"离线模式"。

<ribbon:Ribbon Height="45">
<ribbon:Ribbon.ApplicationMenu>
    <ribbon:RibbonApplicationMenu Width="56">
        <ribbon:RibbonApplicationMenuItem Header="New Campaign" Command="{Binding Path=AddCampaign}" ImageSource="imagesnew.png"/>
        <ribbon:RibbonApplicationMenuItem Header="Save Campaigns" Command="{Binding Path=Save}" ImageSource="imagessave.png" />
        <ribbon:RibbonApplicationMenuItem Header="Import Campaign" Command="{Binding Path=ImportCampaign}" ImageSource="imagescampaign-import-128x128.png"/>
        <ribbon:RibbonApplicationMenuItem Header="Export Campaign" Command="{Binding Path=ExportCampaign}" ImageSource="imagescampaign-export-128x128.png" />
        <ribbon:RibbonApplicationMenuItem Header="Terms of Use" Command="{Binding Path=Eula}" ImageSource="imagesterms.png"/>
        <ribbon:RibbonApplicationMenuItem Header="Resources" Command="{Binding Path=Resources}" ImageSource="imagesresource.jpg"/>
        <ribbon:RibbonApplicationMenuItem Header="About" Command="{Binding Path=About}" ImageSource="imagesresource.jpg"/>
        <ribbon:RibbonApplicationMenu.AuxiliaryPaneContent>
            <StackPanel>
                <StackPanel Orientation="Horizontal">
                    <Label Width="130" Content="Campaign"/>
                    <Label Width="60" Content="Duplicate"/>
                    <Label Width="50" Content="Delete"/>
                </StackPanel>
                <ListBox ItemsSource="{Binding Path=Repository.Campaigns}" 
                            SelectedItem="{Binding Path=SelectedCampaign, Mode=TwoWay}" 
                            ItemContainerStyle="{StaticResource ListBoxItemStyle}" 
                            Height="212" 
                            ScrollViewer.VerticalScrollBarVisibility="Visible" 
                            ScrollViewer.HorizontalScrollBarVisibility="Hidden">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <Label Content="{Binding Path=Name}" Width="130" />
                                <Button Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ItemsControl}}, Path=DataContext.DuplicateCampaign}"
                                    CommandParameter="{Binding Path=Name}" Width="60">
                                    <Button.Template>
                                        <ControlTemplate>
                                            <Border HorizontalAlignment="Center" VerticalAlignment="Center" >
                                                <Image Source="/asdf;component/images/duplicate.png" Width="24" Height="24"/>
                                            </Border>
                                        </ControlTemplate>
                                    </Button.Template>
                                </Button>
                                <Button Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ItemsControl}}, Path=DataContext.RemoveCampaign}"
                                    CommandParameter="{Binding Path=Name}" Width="50">
                                    <Button.Template>
                                        <ControlTemplate>
                                            <Border HorizontalAlignment="Center" VerticalAlignment="Center" >
                                                <Image Source="/asdf;component/images/delete.png" Width="24" Height="24"/>
                                            </Border>
                                        </ControlTemplate>
                                    </Button.Template>
                                </Button>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
                <Button Content="View Archived" 
                        Command="{Binding Path=ArchivedCampaigns}"></Button>
            </StackPanel>
        </ribbon:RibbonApplicationMenu.AuxiliaryPaneContent>
        <ribbon:RibbonApplicationMenu.FooterPaneContent>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
                <ribbon:RibbonButton Label="LOGOUT" Command="{Binding Path=Logout}" />
                <ribbon:RibbonButton Label="EXIT" Command="{Binding Path=Exit}" />
            </StackPanel>
        </ribbon:RibbonApplicationMenu.FooterPaneContent>
    </ribbon:RibbonApplicationMenu>
</ribbon:Ribbon.ApplicationMenu>

这是我的登录方法,其中创建了窗口,并且dataContext被绑定。uitest是我的离线模式配置。

private void Login()
{
    MainVM = new ViewModel.MainWindowVM();
    _mainWindow = new RibbonMainWindow
    {
        DataContext = MainVM
    };
    //Prompt user for login.
#if UITEST
    _loggedIn = true;
    MainVM.LoadData();
#else
    var loginWindow = new Login();
    var login = new ViewModel.LoginVM();
    loginWindow.DataContext = login;
    loginWindow.ShowDialog();
    if (loginWindow.DialogResult != null) _loggedIn = loginWindow.DialogResult.Value;
#endif
    if (_loggedIn && MainVM.Loaded)
    {
        _mainWindow.ShowDialog();
    }
}

编辑:尽我所能猜测,这可能是由于使用了.NET 4.5天前使用的旧版功能带控制。去年,我将该软件重新定位到.NET 4.6.1,因此我切换到内置的功能区,为.NET,现在它的工作奇怪了。如果我试图弄乱窗户上的其他任何东西,似乎再次破裂。就像我尝试在窗口中强烈类型的datacontext一样。

我可以猜到,这可能是由于使用了4.5天的前.NET中使用了旧式的corbboncontrolslibrary。去年,我将该软件重新定位到.NET 4.6.1,因此我切换到内置的功能区,为.NET,现在它的工作奇怪了。如果我试图弄乱窗户上的其他任何东西,似乎再次破裂。就像我尝试在窗口中强烈类型的datacontext一样。

最新更新