DXBinding (DevExpress 바인딩 기술)

저는 이 컴포넌트를 사용하지 않고 있지만, 지금 DevExpress를 사용하시는 분들에게 유용한 정보가 될 것 같습니다.

DevExpress Bindings


WPF 기본 바인딩을 넘어 DevExpress에서 제공하는 재미있는 바인딩 기술들을 소개합니다. 여기

어떠한 문법, 방식을 제공하고 있는지 주요 예제들을 한번 살펴보겠습니다.

DXBinding

C# Boolean 논리 연산자, 메서드, 생성자 등을 사용할 수 있습니다.

IsEnabled="{DXBinding '!HasError'}"
IsEnabled="{DXBinding 'GetHasError(Text)'}"
Margin="{DXBinding 'new $Thickness(LeftIndent, 0, 0, 0)'}"

DXCommand

Execute, CanExecute, 메서드 멀티 호출, 변수 지정, 형 변환 등 유연하게 활용할 수 있습니다.

<Button Content="OK" 
    Command="{DXCommand Execute='Save(); Close()', CanExecute='CanSave() and CanClose()'}"/>

<TextBlock x:Name="tb" Text="text"/>
<Button Content="OK" 
    Command="{DXCommand Execute='Save(@e(tb).Text)', CanExecute='CanSave(@e(tb).Text)'}"/>

<TextBlock x:Name="tb" Text="text"/>
<Button Content="OK" 
    Command="{DXCommand Execute='Save(@parameter)', CanExecute='CanSave(@parameter)'}" 
    CommandParameter="{DXBinding @e(tb).Text}"/>

<Button Command="{DXCommand '@e(checkBox).IsChecked=true'}"/>

DXViewModel

Behaivor 선언 없이도 유연하게 뷰모델 메서드를 접근할 수 있군요.

view.xaml

<StackPanel>
    <StackPanel.DataContext>
        <local:ViewModel />
    </StackPanel.DataContext>
    <Button Content="OK" Loaded="{DXEvent Handler='Initialize()'}" />
    <Button Content="OK" Loaded="{DXEvent Handler='Initialize(); Load()'}" />
</StackPanel>

viewmodel.cs

public class ViewModel 
{
    public void Initialize() { }
    public void Load() { }
}

Event arguments도 중간에서 하이재킹할 수도 있습니다.

view.xaml

<TextBlock x:Name="tb" Text="text"/>
<Button Content="OK" 
    Loaded="{DXEvent Handler='Initialize(@sender.Content, @args, @e(tb).Text)'}"/>

viewmodel.cs

public void Initialize(object content, RoutedEventArgs args, string text) { }

더 자세한 내용은 아래 공식 문서를 통해 확인하실 수 있습니다.

읽어주셔서 감사합니다.
:smile:

4 Likes

image
이용 요금이 … ㅎㄷㄷ
그만큼 활용도가 높은 거겠죠?

2 Likes

@Stupid 앗 제가 제품 라이센스 정책이라든지 누겟인지는 정확히… 잘 모르겠습니다.

혹시 사용중이신분이 계시면 답변 부탁드립니다!

2 Likes

@Stupid 아직 직접 확인해보진 않았는데 무료인 것 같습니다!!

2 Likes

본 기능은 아래 누겟을 통해 무료로 제공됩니다.
The MIT License (MIT)

image

3 Likes

좋은 내용 감사합니다.
삼항연산자로 간결하게 사용가능합니다.
DXBinding과 DXEvent를 잘 사용하고 있습니다.

<dxg:GridColumn
    Width="60"
    FieldName="Bool"
    IsSmart="True"
    >
    <dxg:GridColumn.CellStyle>
        <Style TargetType="dxg:LightweightCellEditor">
            <Setter Property="Background" Value="{DXBinding 'Value ? `LightGreen` : `White`'}" />
            <!--<Style.Triggers>
                <DataTrigger Binding="{DXBinding 'Value eq true'}" Value="True">
                    <Setter Property="Background" Value="LightGreen" />
                </DataTrigger>
                <DataTrigger Binding="{DXBinding 'Value eq false'}" Value="True">
                    <Setter Property="Background" Value="White" />
                </DataTrigger>
            </Style.Triggers>-->
        </Style>
    </dxg:GridColumn.CellStyle>
</dxg:GridColumn>
3 Likes