1

これはおそらく初心者の質問であることは知っていますが、繰り返しになりますが、私はWPFにかなり慣れていません。現在、私のテキストボックス、ラベル、テキストブロックなどのほとんどは、ロジックが何であるかに基づいて、xaml.csコードの背後に隠されています。コントロールをxamlファイルからビューモデルにマップする方法があるかどうか知りたいですか?

<TextBlock Name="txtBlockName" Text="Name:" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="15,0,0,0" Visibility="Hidden" />
<TextBox Name="txtName"  Width="auto" HorizontalAlignment="Left" VerticalAlignment="Bottom" Visibility="Hidden" />
4

2 に答える 2

2

ビューモデルがコントロールのDataContextとして設定されていることを確認してください。次に、次のようなものを使用できます

<TextBox Text="{Binding PropertyName, Mode=TwoWay}" Name="txtName"  Width="auto" HorizontalAlignment="Left" VerticalAlignment="Bottom" />

TextBoxのTextをビューモデルのPropertyNameにバインドします

于 2012-05-09T13:24:36.600 に答える
1

これにはバインディングを使用します(一方向と双方向のバインディングがあります。この場合、おそらく双方向のバインディングを探しています)。

こちらもご覧ください:msdnチュートリアルとxamlバインディングチートシートを保持できます:)。

いくつかの基本的な例。私が行ったのはデータコンテキストを設定することでした。この場合はMainWindowクラス(それ自体)に設定しましたが、ビューモデルに簡単に設定できます。MyFoo.MyString次に、の値をテキストボックスのtextプロパティにバインドしました。

ボタンと他のテキストフィールドは、双方向バインディングが機能することを示すためのものです(この場合はデフォルトです)。

XAML:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        DataContext="{Binding RelativeSource={RelativeSource Self}}">
    <Grid>
        <TextBox Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" Text="{Binding MyFoo.MyString}" />
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="12,41,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="12,70,0,0" Name="textBox2" VerticalAlignment="Top" Width="120" IsEnabled="False" Text="Init" />
    </Grid>
</Window>

Foo次の定義でクラスを作成します。

public class Foo
{
    public string MyString { get; set; }
}

そして、背後にあるMainWindowコードには、次のものがあります。

public partial class MainWindow : Window
{
    public Foo MyFoo { get; set; }

    public MainWindow()
    {
        MyFoo = new Foo() { MyString = "Hello" };

        InitializeComponent();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        textBox2.Text = MyFoo.MyString;
    }
}

これは簡単で汚い例です。残りの部分を理解できると思います。さもないと、周りを見回すだけで、WPFのデータバインディングに関する多くの情報があります。

于 2012-05-09T12:44:33.350 に答える