-2

次のスニペットでは、INotifyPropertyChanged は常に null です。

xaml:

<TextBlock
    Name="tbkContent"
    Text="{Binding Path= value,Mode=TwoWay}"
    TextWrapping="Wrap"
    FontSize="22"
    HorizontalAlignment="Center"
    VerticalAlignment="Center"
    TextAlignment="Center"
    Foreground="White"
    Height="100"
    Width="400" />

CS:

// ...
TextContent content = new TextContent();
// ...

public class TextContent:INotifyPropertyChanged
{      

    public event PropertyChangedEventHandler PropertyChanged;       
    protected void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    private string _value;
    public string value
    {
        get
        {
            return _value;
        }
        set
        {
            _value = value;
            this.NotifyPropertyChanged("value");
        }
    }

}

// ...
private void BindingImages(int ImgId)
{
    switch (ImgId)
    {
        case 1:
            content.value = "binding1";
            break;
        case 2:
            content.value = "binding2";
            break;
        case 3:
            content.value = "binding3";
            break;
        default:
            content.value = "binding4";
            _incrID = 0;
            break;
        }
        DoTransitions(ImgBg);
    }

TextblockValue が割り当てられることはありません。これは常に null です

if (PropertyChanged != null) // <-----null here
{

}

Textblock のテキストが適切に更新されていません。

最後に、私は自分で手に入れました。以下はトリックを行いました

スイッチ (ImgId) {

            case 1:
                _textcontent = new TextContent();
                _textcontent.content = "binding1";
                tbkContent.DataContext = _textcontent;

                break;
            case 2:
                _textcontent = new TextContent();
                _textcontent.content = "binding2";
                tbkContent.DataContext = _textcontent;
                break;
            case 3:
                _textcontent = new TextContent();
                _textcontent.content = "binding3";
                tbkContent.DataContext = _textcontent;
                break;
            default:
                _textcontent = new TextContent();
                _textcontent.content = "binding4";
                tbkContent.DataContext = _textcontent;
                _incrID = 1;
                break;
        }

私はdatacontextプロパティの設定を逃しました..ありがとうございました

4

1 に答える 1

0

最後に、私は自分で手に入れました。以下はトリックを行いました

datacontext プロパティの設定を見逃していました...

switch (ImgId)
{
    case 1:
        _textcontent = new TextContent();
        _textcontent.content = "binding1";
        tbkContent.DataContext = _textcontent;
         break;
    case 2:
        _textcontent = new TextContent();
        _textcontent.content = "binding2";
        tbkContent.DataContext = _textcontent;
        break;
    case 3:
        _textcontent = new TextContent();
        _textcontent.content = "binding3";
        tbkContent.DataContext = _textcontent;
        break;
    default:
        _textcontent = new TextContent();
        _textcontent.content = "binding4";
        tbkContent.DataContext = _textcontent;
        _incrID = 1;
        break;
}

皆さん、ありがとうございました

于 2013-05-29T11:57:03.267 に答える