2017-07-12 18 views
3

マルチバインドが機能しません。 「MatrixToDataViewConverter」という名前は、xaml内の名前空間 'clr-NameSpace:myNamespace'には存在しません(私はその行にマークを付けました)。どうして?マルチバインドを設定できません

XAML

<Window x:Class="myNamespace.PopMeUp" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:app="clr-namespace:myNamespace" 
      Title="PopMeUp" Height="300" Width="300"> 
     <Window.Resources> 
      <app:MatrixToDataViewConverter x:Key="MatrixToDataViewConverter"/> <!-- Error here--> 
     </Window.Resources> 
     <Grid> 
      <DataGrid> 
       <DataGrid.ItemsSource> 
        <MultiBinding Converter="{StaticResource MatrixToDataViewConverter}"> 
         <Binding Path="ColumnHeaders"/> 
         <Binding Path="RowHeaders"/> 
         <Binding Path="Values"/> 
        </MultiBinding> 
      </DataGrid.ItemsSource> 
      </DataGrid> 
     </Grid> 
    </Window> 

は.csファイル:

namespace myNamespace  
{ 
    /// <summary> 
    /// Interaction logic for PopMeUp.xaml 
    /// </summary> 
    public partial class PopMeUp : Window 
    { 
     public PopMeUp(MWArray[] Result, int rows, int columns) 
     { 
      InitializeComponent(); 
     } 

     public class MatrixToDataViewConverter : IMultiValueConverter 
     { 
      public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
      { 
       var myDataTable = new DataTable(); 
       return myDataTable.DefaultView; 
      } 


      public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
      { 
       throw new NotImplementedException(); 
      } 
     } 
    } 
} 
+0

なぜあなたの 'ResultPopUp'クラスは' IMultiValueConverter'を実装していますか? あなたは 'MatrixToDataViewConverter'を別ファイルに置いてみましたか、それとも到達可能なように少なくともResultPopUpを外に出してみましたか? –

+2

'MatrixToDataViewConverter'をネストしたクラスとして定義したのはなぜですか? –

+0

申し訳ありませんが、IMultiValueConverterをResultPopUpクラスから離れるのを忘れてしまいました。私は別のクラスに入れようとしましたが、うまくいきません。同じエラーが発生しました。 @MightyBadaboom – Anna

答えて

4

問題はMatrixToDataViewConverterが入れ子になったクラスであること、です。このようなCSファイルをリファクタリング:

namespace myNamespace  
{ 
    /// <summary> 
    /// Interaction logic for ResultPopUp.xaml 
    /// </summary> 
    public partial class ResultPopUp : Window 
    { 
     public ResultPopUp(MWArray[] Result, int rows, int columns) 
     { 
      InitializeComponent(); 
     }   
    } 

    public class MatrixToDataViewConverter : IMultiValueConverter 
    { 
     public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
     { 
      var myDataTable = new DataTable(); 
      return myDataTable.DefaultView; 
     } 

     public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 
} 

その後、あなたのソリューションにCleanRebuildを行います。 XAMLデザイナを閉じて、再度開きます。

+0

ああ、私はとても馬鹿だと感じます。どうもありがとうございます!それは今、完璧に動作します。 – Anna

2

ネストされたクラスとしてIValueConverterまたはIMultiValueConverterを定義することはできません。別のファイルに入れたり、少なくともResultPopUpクラスの外に置いてください。詳細については

は見てきた:たぶん、あなたはクリーンアップにBinding converter as inner class?

を持っており、リファクタリング後にあなたのソリューションを再構築します。

関連する問題