2017-04-17 7 views
-2

ListBoxをバインドするのに問題があり、私の人生にとって何が間違っているのか理解できません。ほとんどの場合、正常に動作しますが、特別なテスト構成では、アプリケーション用に動作しません。それが私を狂わせてしまいます。私は文字通り数時間それを見つめて、あらゆる種類のことを試しました。それは拘束力のある問題ですが、私はそれを見つけることができません。私が見ることができる例外やバインディングエラーはありません。ListBoxバインディングがテストコンフィグレーションで動作しない

テスト設定は私のデバッグ設定と同じですが、コンパイルシンボルが追加されています。これにより、ソフトウェアスタック全体を実行せずにWPFアプリケーションをテストすることができます。これは、すべての目的と目的のための「オフラインモード」です。

<ribbon:Ribbon Height="45"> 
<ribbon:Ribbon.ApplicationMenu> 
    <ribbon:RibbonApplicationMenu Width="56"> 
     <ribbon:RibbonApplicationMenuItem Header="New Campaign" Command="{Binding Path=AddCampaign}" ImageSource="images\new.png"/> 
     <ribbon:RibbonApplicationMenuItem Header="Save Campaigns" Command="{Binding Path=Save}" ImageSource="images\save.png" /> 
     <ribbon:RibbonApplicationMenuItem Header="Import Campaign" Command="{Binding Path=ImportCampaign}" ImageSource="images\campaign-import-128x128.png"/> 
     <ribbon:RibbonApplicationMenuItem Header="Export Campaign" Command="{Binding Path=ExportCampaign}" ImageSource="images\campaign-export-128x128.png" /> 
     <ribbon:RibbonApplicationMenuItem Header="Terms of Use" Command="{Binding Path=Eula}" ImageSource="images\terms.png"/> 
     <ribbon:RibbonApplicationMenuItem Header="Resources" Command="{Binding Path=Resources}" ImageSource="images\resource.jpg"/> 
     <ribbon:RibbonApplicationMenuItem Header="About" Command="{Binding Path=About}" ImageSource="images\resource.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日からレガシーRibbonControlsLibraryを使用するかもしれません。昨年、ソフトウェアを.NET 4.6.1にリターゲットしました。そこで、Ribbonを.NETに組み込み、これで不思議なことができました。私が窓の中で何かを混乱させようとすると、それはちょうど再び壊れるようです。私が強く入力しようとするように、DataContextをウィンドウに入力します。

+0

Uhhh、あなたは多分、動作していない "特別なテスト構成"を説明できますか? – MrZander

+0

ああ、申し訳ありません。これは私のデバッグ設定と同じですが、コンパイルシンボルが追加されています。これにより、ソフトウェアスタック全体を実行せずにWPFアプリケーションをテストすることができます。これは、すべての目的と目的のための「オフラインモード」です。 –

+0

私の最初の推測は、DataContextが設定されていないということです。 – 0x4f3759df

答えて

0

私が推測できるくらい近いところでは、以前のRibbonControlsLibraryを.NET 4.5日前から使用している可能性があります。昨年、ソフトウェアを.NET 4.6.1にリターゲットしました。そこで、Ribbonを.NETに組み込み、これで不思議なことができました。私が窓の中で何かを混乱させようとすると、それはちょうど再び壊れるようです。私が強く入力しようとするように、DataContextをウィンドウに入力します。

関連する問題