1

私はデータ バインディングをいじっています。次のようなユーザー コントロール (ビュー) を作成します。

<UserControl>
<Grid x:Name="LayoutRoot" 
      Background="{StaticResource PhoneChromeBrush}" 
      DataContext="{Binding Source={StaticResource ViewModelSampleDataSource}}"
      >
    <Grid.RowDefinitions>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="1*"/>
    </Grid.RowDefinitions>
    <TextBox Text="{Binding Model.Var1, Mode=TwoWay}" InputScope="Number" Grid.Row="0" FontSize="90"/>
    <TextBlock Text="{Binding Model.Var2}" Grid.Row="1" FontSize="90" />
</Grid>

私はこのクラスモデルを持っています

 public class ModelSample:INotifyPropertyChanged
{
    public ModelSample()
    {

    }

    private double var1;
    public double Var1
    {
        get { return var1; }
        set 
        { 
            var1 = value;
            OnPropertyChanged("var"); 
        }
    }

    private double var2;
    public double Var2
    {
        get { return var2; }
        set 
        { 
            var2 = value; 
            OnPropertyChanged("var2"); 
        }
    }


    public event PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(name));
    }
}

これがビューモデルです

public class ViewModelSample
{
    private static ModelSample model=new ModelSample();
    public static ModelSample Model
    {
        get { return model; }
        set { model = value; }
    }

}

私の問題は次のとおりです: var1 の値を (テキストボックスを使用して) 変更すると、var2 の値を更新したいのですが、どうすればよいですか? ありがとう

4

3 に答える 3

1

OnPropertyChanged に使用する文字列値は、フィールド名ではなくプロパティ名と一致する必要があります。修正後、Var1 のセッター内から Var2 を変更するだけでうまくいくはずです。

于 2013-11-15T00:09:09.523 に答える
0

これを変える

    private double var1;
public double Var1
{
    get { return var1; }
    set 
    { 
        var1 = value;
        OnPropertyChanged("var"); 
    }
}

private double var2;
public double Var2
{
    get { return var2; }
    set 
    { 
        var2 = value; 
        OnPropertyChanged("var2"); 
    }
}

これに

    private double var1;
public double Var1
{
    get { return var1; }
    set 
    { 
        var1 = value;
        OnPropertyChanged("Var"); 
    }
}

private double var2;
public double Var2
{
    get { return var2; }
    set 
    { 
        var2 = value; 
        OnPropertyChanged("Var2"); 
    }
}

変更されたプロパティを上げるには、そのプロパティ名で大文字と小文字を区別する必要があります。

于 2013-11-15T00:13:20.267 に答える
0

これを試して:

private double var1;
public double Var1
{
    get { return var1; }
    set 
    { 
        var1 = value;
        OnPropertyChanged("Var1"); 
    }
}

private double var2;
public double Var2
{
    get { return var2; }
    set 
    { 
        var2 = value; 
        OnPropertyChanged("Var2"); 
    }
}

OnPropertyChanged 文字列はプロパティの名前と一致する必要があることに注意してください

于 2013-11-15T08:37:27.423 に答える