정적 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로 다시 전달합니다. 위의 경우에도 나는 여전히 궁금해. 현재는 그렇지 않은 것처럼 보입니다.
을해야한다 그런 다음, Binding''에 DynamicConditionBehavior.ColorScaleFormat''의 유형을 변경하려면 'Binding' 뭔가를해야한다. – AnjumSKhan
Behavior가 dependencyObject를 구현하지 않기 때문에 작동하지 않습니다. 나는 그것이 실제로 가능하다고 생각하지 않지만 다른 방법으로 해결했습니다. – rolls
예 : 'public static readonly DependencyProperty ColorScaleFormatProperty = DependencyProperty.Register ( "ColorScaleFormat", typeof (Binding), typeof (ColorScaleFormatProperty), 새 FrameworkPropertyMetadata (defaultColorScaleFormat); ' – AnjumSKhan