0

정적 ColorScaleFormat을 설정하면 잘 작동하는 GridControl의 색 서식을 설정하는 다음과 같은 동작이 있습니다. 그러나 colorcale 형식은 모델 데이터에 따라 다르므로 내 뷰 모델에 데이터 바인딩해야합니다.종속성 속성을 WPF 동작에 추가

어쨌든 이렇게하려면 다음과 같이 DependencyProperty로 만들어야합니다. 문제는 런타임에 다음과 같은 오류가 발생합니다 : 'DynamicConditionBehavior'유형의 'ColorScaleFormat'속성에서 'Binding'을 설정할 수 없습니다. 'Binding'은 DependencyObject의 DependencyProperty에서만 설정할 수 있습니다.

[POCOViewModel] 
public class Table2DViewModel 
{ 
    public DataTable ItemsTable { get; set; } 
    public ColorScaleFormat ColorScaleFormat { get; set; } 
    public static Table2DViewModel Create(Table2D table2D) 
    { 
     var factory = ViewModelSource.Factory((Table2D table) => new Table2DViewModel(table)); 
     return factory(table2D); 
    } 
} 

을 내 Table2DView XAML 코드 :

<dxg:GridControl ItemsSource="{Binding ItemsTable}" 
      AutoGenerateColumns="AddNew" 
      EnableSmartColumnsGeneration="True"> 
<!--DesignTimeDataObjectType="{x:Type ViewModels:RowData}"--> 

    <dxmvvm:Interaction.Behaviors > 
     <behaviors:DynamicConditionBehavior ColorScaleFormat="{Binding ColorScaleFormat, Mode=OneWayToSource}" /> 
     </dxmvvm:Interaction.Behaviors> 
     <dxg:GridControl.View> 
      <dxg:TableView ShowGroupPanel="False" 
         AllowPerPixelScrolling="True"/> 
     </dxg:GridControl.View> 
    </dxg:GridControl> 

내가 행동에 다음 줄을 변경하는 경우

Format = ColorScaleFormat 

하려면 다음과 같이

public class DynamicConditionBehavior : Behavior<GridControl> 
{ 
    GridControl Grid => AssociatedObject; 

    protected override void OnAttached() 
    { 
     base.OnAttached(); 
     Grid.ItemsSourceChanged += OnItemsSourceChanged; 
    } 

    protected override void OnDetaching() 
    { 
     Grid.ItemsSourceChanged -= OnItemsSourceChanged; 
     base.OnDetaching(); 
    } 

    public ColorScaleFormat ColorScaleFormat { 
     get { return (ColorScaleFormat) GetValue(ColorScaleFormatProperty); } 
     set { SetValue(ColorScaleFormatProperty, value);} 
    } 
    public static ColorScaleFormat defaultColorScaleFormat = new ColorScaleFormat 
    { 
     ColorMin = (Color)ColorConverter.ConvertFromString("#FFF8696B"), 
     ColorMiddle = (Color)ColorConverter.ConvertFromString("#FFFFEB84"), 
     ColorMax = (Color)ColorConverter.ConvertFromString("#FF63BE7B") 
    }; 

    public static readonly DependencyProperty ColorScaleFormatProperty = DependencyProperty.Register(
     "ColorScaleFormat", typeof(ColorScaleFormat), typeof(ColorScaleFormatProperty), new FrameworkPropertyMetadata(defaultColorScaleFormat)); 

    .... 

    private void OnItemsSourceChanged(object sender, EventArgs e) 
    { 
     var view = Grid.View as TableView; 
     if (view == null) return; 

     view.FormatConditions.Clear(); 
     foreach (var col in Grid.Columns) 
     { 
      view.FormatConditions.Add(new ColorScaleFormatCondition 
      { 
       MinValue = 0, 
       MaxValue = 20, 
       FieldName = col.FieldName, 
       Format = ColorScaleFormat, 
      }); 
     } 
    } 
} 

내보기 모델이다

Format = defaultColorScaleFormat 

그리고 XAML의 모든 작품에서 데이터 바인딩을 제거, 그러나 나는 그래서 그것을 변경할 수 있습니다 내 뷰 모델에 ColorScaleFormat을 데이터 바인딩하는 방법을 파악하려면이 속성을 생성하여 데이터 변경.

어떻게 DynamicConditionBehavior가 DependencyObject를 구현하도록 만들 수 있습니까? 그렇다면 ColorScaleFormat을 데이터 바인딩 할 수 있습니까?

편집 : 시간에 내가 ITable2DView 인터페이스를 만들어이 문제를 해결 일한되는 : 나는 http://blog.falafel.com/adding-a-dependency-property-to-a-class-that-is-not-a-dependency-object/

EDIT2가 내 경우에는 필요한 경우 잘 모르겠어요하지만 도움이 될 수 있습니다,이 클래스를 발견 View의 참조를 ViewModel에 건네줍니다. 그런 다음 View 모델은 SetColourFormatter라는 함수를 호출하고 변수를 OK로 작동하는 Behavior로 다시 전달합니다. 위의 경우에도 나는 여전히 궁금해. 현재는 그렇지 않은 것처럼 보입니다.

+0

을해야한다 그런 다음, Binding''에 DynamicConditionBehavior.ColorScaleFormat''의 유형을 변경하려면 'Binding' 뭔가를해야한다. – AnjumSKhan

+0

Behavior가 dependencyObject를 구현하지 않기 때문에 작동하지 않습니다. 나는 그것이 실제로 가능하다고 생각하지 않지만 다른 방법으로 해결했습니다. – rolls

+0

예 : 'public static readonly DependencyProperty ColorScaleFormatProperty = DependencyProperty.Register ( "ColorScaleFormat", typeof (Binding), typeof (ColorScaleFormatProperty), 새 FrameworkPropertyMetadata (defaultColorScaleFormat); ' – AnjumSKhan

답변

0

민주당이 대해서 typeof 행동

public static readonly DependencyProperty ColorScaleFormatProperty = DependencyProperty.Register(
    "ColorScaleFormat", typeof(ColorScaleFormat), typeof(DynamicConditionBehavior), new FrameworkPropertyMetadata(defaultColorScaleFormat)); 
+0

나는 이것을 시도하고 다시보고 할 것이다. 고맙습니다. – rolls