2012-01-18 5 views
0

DataGrid.Resources를 사용하여 제대로 작동하려면 TwoWay Binding을 가져올 수 없습니다. TextBox는 편집 할 행과 함께 나타납니다. 행을 종료하면 해당 행에 바인딩 된 개체가 새 값으로 업데이트되지 않습니다 (INotifyPropertyChanged를 구현하는 개체의 중단 점을 테스트 한 결과).Twoway 바인딩이 DataGrid.Resources 내에서 작동하지 않습니다.

DataBrid.Resources의 외부에 여러 개의 Datatemplates를 작성하기 전에 데이터 바인딩이 제대로 작동하고있었습니다.

<DataGrid AutoGenerateColumns="False" Name="dataGridProviderProperties" Height="215" FontSize="11" HorizontalGridLinesBrush="#FFC1C1C1" 
          VerticalGridLinesBrush="#FFC1C1C1" Padding="0" Background="#00000000" EnableRowVirtualization="False" 
          HorizontalScrollBarVisibility="Auto" EnableColumnVirtualization="True" CanUserResizeRows="False" AlternationCount="2" 
          AlternatingRowBackground="#05000000" CanUserAddRows="False" DataContext="{Binding}" ItemsSource="{Binding Properties}" VerticalAlignment="Center" Width="345" 
          VerticalContentAlignment="Center"> 
        <DataGrid.Resources> 
         <DataTemplate x:Key="IsSelectedColumnTemplate"> 
          <TextBlock Text="{Binding Value}"/> 
         </DataTemplate> 
         <DataTemplate x:Key="IsSelectedColumnTemplateEditing"> 
          <ContentControl x:Name="ControlHolder" Content="{Binding Value}"> 
           <ContentControl.Resources> 
            <DataTemplate DataType="{x:Type System:String}"> 
             <TextBox Text="{Binding ., Mode=TwoWay}" /> 
            </DataTemplate> 
            <DataTemplate DataType="{x:Type System:Boolean}"> 
             <CheckBox IsChecked="{Binding}"/> 
            </DataTemplate> 
           </ContentControl.Resources> 
          </ContentControl> 
         </DataTemplate> 
        </DataGrid.Resources> 
        <DataGrid.Columns> 
         <DataGridTemplateColumn Header="Key" Width="100"> 
          <DataGridTemplateColumn.CellTemplate> 
           <DataTemplate> 
            <Label VerticalContentAlignment="Center" Height="27" VerticalAlignment="Center" Content="{Binding Key, Mode=OneWay}" Padding="3"></Label> 
           </DataTemplate> 
          </DataGridTemplateColumn.CellTemplate> 
         </DataGridTemplateColumn> 
         <DataGridTemplateColumn Header="Value" x:Name="myIsSelectedColumn" CellTemplate="{StaticResource IsSelectedColumnTemplate}" 
          CellEditingTemplate="{StaticResource IsSelectedColumnTemplateEditing}" CanUserSort="True" Width="Auto" /> 
        </DataGrid.Columns> 
       </DataGrid> 

답변

0

이 비슷한 문제가있었습니다. 다음 페이지를 살펴 보자 : 나는이 문제에 대한 해결책으로 내 질문을 통해 업데이트

Silverlight DataBinding Error

0

. 바라기를 이것은 동일한 문제점을 가진 누군가를 도울 것입니다.

DataTemplateSelector 클래스를 만든 다음 해당 클래스를 XAML에서 호출해야했습니다. 아래는 Template Selector 클래스와 함께 새로운 XAML 코드의 복사본입니다.

<Window.Resources> 
     <DataTemplate x:Key="ProviderStringTemplate" DataType="{x:Type System:String}"> 
      <TextBox VerticalAlignment="Center" Text="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" Width="200" /> 
     </DataTemplate> 
     <DataTemplate x:Key="ProviderBooleanTemplate" DataType="{x:Type System:Boolean}"> 
      <CheckBox Margin="15,0,0,0" VerticalAlignment="Center" IsChecked="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" /> 
     </DataTemplate> 
     <Windows:ProviderPropertyTemplateSelector x:Key="templateSelector" /> 
    </Window.Resources>  
<DataGrid AutoGenerateColumns="False" Name="dataGridProviderProperties" Height="215" FontSize="11" HorizontalGridLinesBrush="#FFC1C1C1" 
          VerticalGridLinesBrush="#FFC1C1C1" Padding="0" Background="#00000000" HorizontalScrollBarVisibility="Auto" 
           CanUserResizeRows="False" AlternationCount="2" AlternatingRowBackground="#05000000" CanUserAddRows="False" 
           DataContext="{Binding}" ItemsSource="{Binding Properties}" VerticalAlignment="Center" Width="345" 
          VerticalContentAlignment="Center" IsManipulationEnabled="False" CanUserReorderColumns="False" SelectionUnit="Cell"> 
         <DataGrid.Columns> 
          <DataGridTemplateColumn Header="Key" Width="100"> 
           <DataGridTemplateColumn.CellTemplate> 
            <DataTemplate> 
             <Label VerticalContentAlignment="Center" Height="27" VerticalAlignment="Center" Content="{Binding Key}" Padding="3"></Label> 
            </DataTemplate> 
           </DataGridTemplateColumn.CellTemplate> 
          </DataGridTemplateColumn> 
          <DataGridTemplateColumn Header="Value" CellTemplateSelector="{StaticResource templateSelector}" CanUserSort="True" Width="200" /> 
         </DataGrid.Columns> 
        </DataGrid> 

    public class ProviderPropertyTemplateSelector : DataTemplateSelector 
    { 
     public override DataTemplate SelectTemplate(object item, DependencyObject container) 
     { 
      var property = item as Property<object>; 

      if (property == null) 
       return null; 

      if (property.Value is Boolean) 
       return ((FrameworkElement)container).FindResource("ProviderBooleanTemplate") as DataTemplate; 

      if (property.Value is String || property.Value is int) 
       return ((FrameworkElement)container).FindResource("ProviderStringTemplate") as DataTemplate; 

      return null; 
     } 
    } 
관련 문제