0

私のUserControlには、TextBoxとButtonが含まれています。TextBoxのテキストは、Xと呼ばれる依存関係プロパティによって正しく入力されます。

私の目標: ボタンを押したときにXの値(テキストボックスのテキストなど)を変更します。

UserControlを次のように定義しました。

<StackPanel Orientation="Horizontal" >
    <TextBox Name="Xbox" Text="{Binding Path=X}" Width="50"/>
    <Button Content="Current" Click="InsertCurrentBtnClick" />
</StackPanel>

コードビハインドあり:

    public double X
    {
        get { return (double)GetValue(XProperty); }
        set { SetValue(XProperty, value); }
    }

    public static readonly DependencyProperty XProperty =
        DependencyProperty.Register("X", typeof(double), typeof(MyUserControl), new PropertyMetadata(0.0));


    private void InsertCurrentBtnClick(object sender, RoutedEventArgs e)
    {
        X = 0.7;

        //BindingOperations.GetBindingExpression(this, XProperty).UpdateTarget();
        //BindingOperations.GetBindingExpression(Xbox, TextBox.TextProperty).UpdateTarget();
        //BindingOperations.GetBindingExpression(Xbox, XProperty).UpdateTarget();
        //Xbox.GetBindingExpression(TextBox.TextProperty).UpdateTarget();
        //GetBindingExpression(XProperty).UpdateTarget();
    }

X=0.7;TextBoxテキストを強制的に更新するためにいくつかのことを一度に1つずつ試しましたが(以下を参照)、これまでのところ何も役に立ちませんでした。

前もって感謝します。

4

3 に答える 3

2

私はそれをこのように書きます:

    public double X
    {
        get { return (double)GetValue(XProperty); }
        set { SetValue(XProperty, value); }
    }

    public static readonly DependencyProperty XProperty =
        DependencyProperty.Register("X", typeof(double), typeof(MainPage), new PropertyMetadata(new PropertyChangedCallback(Callback)));


    public static void Callback(DependencyObject o, DependencyPropertyChangedEventArgs e)
    {
        (o as MainPage).Xbox.Text = e.NewValue.ToString();
    }

    private void InsertCurrentBtnClick(object sender, RoutedEventArgs e)
    {
        X = 0.7;
    }

そしてxamlコード:

    <StackPanel Orientation="Horizontal" >
        <TextBox Name="Xbox" Width="50"/>
        <Button Content="Current" Click="InsertCurrentBtnClick" />
    </StackPanel>
于 2012-07-11T08:06:07.547 に答える
1

DataContextあなたはあなたのためにコントロールを設定する必要があります。私Xがあなたのコントロールで定義されているのを見ると、あなたはこれをする必要があります:

    public MyUserControl()
    {
        InitializeComponent();

        // add this line
        this.DataContext = this;
    }
于 2012-07-11T08:13:27.190 に答える
1

バインドすることもできますが、xamlを変更するだけです。

<UserControl x:Class="SilverlightApplication1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Name="myWidnow"
d:DesignHeight="300" d:DesignWidth="400">

<Grid x:Name="LayoutRoot" Background="White">
    <StackPanel Orientation="Horizontal" >
        <TextBox Name="Xbox" Width="50" Text="{Binding ElementName=myWidnow, Path=X}" />
        <Button Content="Current" Click="InsertCurrentBtnClick" />
    </StackPanel>
</Grid>

NameプロパティをUserControlに追加したことに注意してください。この場合、コードの背後にあるものを変更する必要はありません。

于 2012-07-11T08:13:34.583 に答える