0

バックグラウンド:

ビューに、さまざまな言語からテキストを取得するために使用する LabelService クラスのインスタンスがあります。

これには、TextBlock にテキストを入力するために、次のようなコードがバックグラウンドにある必要があります。

XAML:

<TextBlock Name="txtExample" Grid.Row="0" Margin="5,5,5,5"/>

C#:

// 'this' refers to the current class, the namespace of which is used to navigate
// through an XML labels file to find the correct label
string label = _labelService.GetSpecificLabel(this, txtExample.Name).Label
txtExample.Text = label;

質問:

この機能を使用することは可能ですか:

_labelService.GetSpecificLabel(this, txtExample.Name).Label

XAML で利用できますか?

補足情報:

名前空間を使用してラベル XML をナビゲートすることの意味を説明するだけです。

クラスが名前空間で次のように定義されているとします

namespace My.App.Frontend
{
    public class MainWindow
    {
        string label = _labelService.GetSpecificLabel(this, txtExample.Name).Label
    }
}

対応する XML は次のようになります。

<My>
  <App>
    <Frontend>
      <MainWindow>
          <txtExample label="I am the example text" />
      </MainWindow>
    </Frontend>
  </App>
</My>
4

1 に答える 1

1

WPFでは、これを実現するためにMVVMパターンがよく使用されます。

テスト可能ではなく、保守性も低いため、コードビハインドでこれを行うことは悪い習慣とさえ見なされます。コードビハインドはできるだけ空のままにしておきます。

このようにして、ラベルサービスに接続できるViewModelクラスができます。次に、ビューがViewModelにバインドされます。

これは、WPFアプリケーションの設計方法に関する非常に優れたビデオチュートリアルです 。MVVMのJasonDollingerです。

彼がチュートリアルで開発したソースコードは、こちらからも入手できます 。JasonDollingerのソースコード

出発点を示すために、非常に単純なViewModelを次に示します(現時点では、_labelServiceとtxtExampleは設定されていないことに注意してください)。

public class TextBoxViewModel : INotifyPropertyChanged
{
    public TextBoxViewModel()
    {
        string label = _labelService.GetSpecificLabel(this, txtExample.Name).Label;
        this.text = label;
    }

    private string text;

    public string Text 
    { 
        get
        {
            return text;
        }

        set 
        {
            text = value;
            NotifyPropertyChanged("Text");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

XAMLでは、バインディング部分が重要です。

<TextBox Text="{Binding Text}" Height="26" HorizontalAlignment="Left" Margin="77,215,0,0" Name="textBox1" VerticalAlignment="Top" Width="306" />

Codebehind(またはそれ以上:足場を作成する場所)

public MainWindow()
{
    InitializeComponent();

    this.DataContext = new TextBoxViewModel();
}
于 2012-07-31T14:25:49.587 に答える