[wpf] 정적 속성에 바인딩



Answers

당신은 그런 정적에 바인딩 할 수 없습니다. DependencyObject (또는 INotifyPropertyChanged 를 구현하는 개체 인스턴스)가 없으므로 바인딩 인프라에서 업데이트 알림을받을 수있는 방법이 없습니다.

해당 값이 변경되지 않으면 바인딩을 제거하고 x:Static Text 속성 안에 직접 사용하십시오. 아래 app VersionManager 클래스의 네임 스페이스 (및 어셈블리) 위치로 정의하십시오.

<TextBox Text="{x:Static app:VersionManager.FilterString}" />

값이 변경되면 값을 포함하고 바인딩 할 단일 항목을 만드는 것이 좋습니다.

싱글 톤의 예 :

public class VersionManager : DependencyObject {
    public static readonly DependencyProperty FilterStringProperty =
        DependencyProperty.Register( "FilterString", typeof( string ),
        typeof( VersionManager ), new UIPropertyMetadata( "no version!" ) );
    public string FilterString {
        get { return (string) GetValue( FilterStringProperty ); }
        set { SetValue( FilterStringProperty, value ); }
    }

    public static VersionManager Instance { get; private set; }

    static VersionManager() {
        Instance = new VersionManager();
    }
}
<TextBox Text="{Binding Source={x:Static local:VersionManager.Instance},
                        Path=FilterString}"/>
Question

간단한 정적 문자열 속성을 텍스트 상자에 바인딩하는 데 어려움을 겪고 있습니다.

다음은 정적 속성을 가진 클래스입니다.

public class VersionManager
{
    private static string filterString;

    public static string FilterString
    {
        get { return filterString; }
        set { filterString = value; }
    }
}

내 xaml에서이 정적 속성을 텍스트 상자에 바인딩하기 만하면됩니다.

<TextBox>
    <TextBox.Text>
        <Binding Source="{x:Static local:VersionManager.FilterString}"/>
    </TextBox.Text>
</TextBox>

모든 것이 컴파일되지만 런타임에는 다음 예외가 발생합니다.

'Source'특성의 값을 'System.Windows.Markup.StaticExtension'형식의 개체로 변환 할 수 없습니다. 마크 업 파일 'BurnDisk; component / selectversionpagefunction.xaml'의 'System.Windows.Data.Binding'개체에서 오류 발생 Line 57 Position 29.

내가 뭘 잘못하고 있는거야?




ObjectDataProvider 클래스와 MethodName 속성을 사용할 수 있습니다. 다음과 같이 보일 수 있습니다.

<Window.Resources>
   <ObjectDataProvider x:Key="versionManager" ObjectType="{x:Type VersionManager}" MethodName="get_FilterString"></ObjectDataProvider>
</Window.Resources>

선언 된 객체 데이터 공급자는 다음과 같이 사용할 수 있습니다.

<TextBox Text="{Binding Source={StaticResource versionManager}}" />



static 속성을 바인딩하는 두 가지 방법 / 구문이있을 수 있습니다. pMainWindow 클래스의 static 속성이면 textbox 대한 binding 은 다음과 같습니다.

1.

<TextBox Text="{x:Static local:MainWindow.p}" />

2.

<TextBox Text="{Binding Source={x:Static local:MainWindow.p},Mode=OneTime}" />



내 프로젝트 인 CalcBinding 살펴보십시오. 정적 속성, 소스 속성, 수학 및 기타를 포함하여 Path 속성 값에 복잡한 식을 작성하는 기능을 제공합니다. 그래서 이것을 작성할 수 있습니다 :

<TextBox Text="{c:Binding local:VersionManager.FilterString}"/>

행운을 빕니다!




Related