2

私はプライベートフィールドを持っています

private static Double myValue;

アプリケーションの MainWindow クラスで。そこで(MainWindowクラスで)プロパティを定義しました

public static Double MytValue
{
    get { return myValue; }
}

MainWindow クラスの構造には、TextBox があります。MytValue プロパティにバインドする必要があります。XAML では次のように記述します。

<TextBox Name="tbxMyValue" Grid.Row="1" Grid.Column="2" TextAlignment="Center"
         Text="{Binding Path=MyValue}" Width="Auto" Margin="10,0,10,15" IsEnabled="True" />

しかし、それは効果がありません。myValue 変数に値がある間、TextBox に何も表示されません。なんで?私を助けてください。

4

4 に答える 4

5

Window セクションに DataContext を設定したい

<Window x:Class="Gabe3a.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:Gabe3a"
        xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
        xmlns:System="clr-namespace:System;assembly=mscorlib"
        DataContext="{Binding RelativeSource={RelativeSource self}}"
        Title="Gabriel Main Ver 3a01" Icon="faviconw.ico" Height="600" Width="800">
于 2012-10-11T20:47:08.363 に答える
4

DataContextそのバインディングを機能させるには、ウィンドウの後ろに設定する必要があります

WPF を使用するアプリケーションには、UI レイヤーとデータ レイヤーの 2 つのレイヤーがあります。

アプリケーションのデータ層は として開始されnull、プロパティを使用して設定できDataContextます。

WPF で基本的なバインディングを行うときはいつでも、DataContext. つまりText="{Binding Path=MyValue}"、実際には「MyValue現在のプロパティを取得する」と言っていますDataContext

DataContextコードビハインドで を設定するだけです。

MyWindow.DataContext = this;

または、バインディングを使用して、プロパティを別の場所からRelativeSource取得するように WPF に指示することもできます。MyValueVisualTree

Text="{Binding Path=MyValue, RelativeSource={
    RelativeSource AncestorType={x:Type Window}}}"

私のブログには、DataContextWPF を初めて使用する場合に読むことをお勧めする記事がありDataContextます

于 2012-10-11T17:48:31.507 に答える
0

それはそれがどのように機能するかではありません。静的プロパティへのバインド。{Binding Source={x:Static local:Application.MyValue}}

フィールドはプロパティとパブリックである必要があることに注意してください。ソリューションを使用する場合は、DataContext を {RelativeSource Self} として設定する必要があります。

于 2012-10-11T17:45:47.960 に答える
0

コンストラクターの MainWindow.xaml.cs ファイルに、次の行を追加します。

DataContext = this;

InitializeComponent();

于 2012-10-11T17:47:26.940 に答える