2017-03-17 6 views
0

Xceed DataGridにグリッド用に定義されたEditTemplateが定義されています。XceedData Column EditTemplateを別のプロパティにバインドする

グリッドは約6列のコレクションにバインドされたアイテムのリストを示し、EditTemplateは数量を入力するためのTextBoxコントロールです。 IsReadOnlyプロパティを別のプロパティにバインドして、アイテムにシリアル番号があるようにするには、IsReadOnlyをtrueに設定してユーザーが値を入力できないようにします。同じコレクション内のSerialNumプロパティにバインドし、それをコンバーターに渡してtrue/false値を返したいとします。私はコンバータを書きました。しかし、私はコンバータに渡すプロパティにバインドする問題があります。マイDataGridCollectionViewSource

は十分に簡単です:

<xcdg:DataGridCollectionViewSource x:Key="transferItems" Source="{Binding TransferItems}" /> 

TransferItemsは私のViewModelに設定され、すべての列は、適切にバインドされます。私の一般的なディスプレイのすべての列については

を経て、彼らが適切に表示されている:私の問題はxcgd:CellEditorテンプレートを定義していると私は私の問題はRelativeSourceの周りにあるかなり確信して

<xcdg:Column Title="Serial No." AllowSort="False" FieldName="SerialNum" /> 

。私は多くの異なる組み合わせを試してみましたが、TransferItems.SerialNumのプロパティをViewModelから取得しようとしましたが、何の組み合わせも機能していません。

これは私が現在持っているものです:

ランタイムエラーを与える
<xcdg:Column Title="Xfer Qty Good" TextWrapping="Wrap" ReadOnly="False" Width="50" AllowGroup="False" AllowSort="False" FieldName="TransferQtyGood"> 
    <xcdg:Column.CellEditor> 
     <xcdg:CellEditor> 
      <xcdg:CellEditor.EditTemplate> 
       <DataTemplate> 
        <TextBox x:Name="QtyGood" Margin="2,2,2,2" Width="50" HorizontalAlignment="Center" VerticalAlignment="Center" 
        Text="{xcdg:CellEditorBinding}" IsReadOnly="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type xcdg:DataGridCollectionViewSource}}, Path=DataContext.TransferItems.SerialNum, Converter={StaticResource serialToEnabledConverter}}" 
        /> 
       </DataTemplate> 
      </xcdg:CellEditor.EditTemplate> 
     </xcdg:CellEditor> 
    </xcdg:Column.CellEditor> 
</xcdg:Column> 

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='Xceed.Wpf.DataGrid.DataGridCollectionViewSource', AncestorLevel='1''. BindingExpression:Path=DataContext.TransferItems.SerialNum; DataItem=null; target element is 'TextBox' (Name='QtyGood'); target property is 'IsReadOnly' (type 'Boolean') 

私はエラーが私に言っているが、私はちょうど適切なRelativeSourceパスを取得していますかを理解。私はRelativeSourceの列挙に関する役に立つポストをいくつか読んだことがありますが、まだ何か不足しています。

答えて

0

誰かがこの問題を抱えている場合には、私は結局このようにバインディングを取得することができました。鍵は正しいRelativeSourceパスを定義しています:

<TextBox x:Name="QtyGood" Margin="2,2,2,2" Width="50" HorizontalAlignment="Center" VerticalAlignment="Center" 
            Text="{xcdg:CellEditorBinding}" GotFocus="Qty_GotFocus" LostFocus="Qty_LostFocus" 
            IsReadOnly="{Binding RelativeSource={RelativeSource AncestorType={x:Type xcdg:DataRow}}, Path=DataContext.SerialNum, Converter={StaticResource serialToEnabledConverter}}" 
            />