4

MVVM パターンに基づいて WP7 アプリケーションを作成しようとしていますが、TextBlock のバインド コンテンツの更新に問題があります。現在の状態では、ページを再度開いてコンテンツを更新する必要があります。データコンテキストの設定に関係していると思いますが、修正できませんでした。

ViewModel.cs の PropertyChangedEventHandler

public class ViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(string propertyName)
    {
        if (null != PropertyChanged)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    private string _txtStatus = "";
    public string TxtStatus
    {
        get { return _txtStatus; }
        set
        {
            _txtStatus = value;
            NotifyPropertyChanged("TxtStatus");
        }
    }

App.xaml.cs の ViewModel プロパティ

public partial class App : Application
{
    private static ViewModel _viewModel { get; set; }
    public static ViewModel ViewModel
    {
        get { return _viewModel ?? (_viewModel = new ViewModel()); }
    }

StatusPage.xaml.cs での DataContext の設定

public partial class Status : PhoneApplicationPage
{
    public Status()
    {
        InitializeComponent();
        DataContext = App.ViewModel;
    }

StatusPage.xaml でのバインド

<TextBlock x:Name="TxtStatus" Text="{Binding Path=TxtStatus, Mode=OneWay}" Width="450" TextWrapping="Wrap" HorizontalAlignment="Left" VerticalAlignment="Top" />

更新 1

MqttService.cs の TxtStatus の設定値

public class MqttService
{
    private readonly ViewModel _viewModel;

    public MqttService(ViewModel viewModel)
    {
        _viewModel = viewModel;
    }

    private void Log(string log)
    {
        _viewModel.TxtStatus = _viewModel.TxtStatus + log;
    }

    private void Connect()
    {
        _client.Connect(true);
        Log(MsgConnected + _viewModel.TxtBrokerUrl + ", " + _viewModel.TxtClientId + "\n");
        _viewModel.IsConnected = true;
    }

ViewModel.cs の MqttService プロパティ

    private MqttService _mqttService;
    public MqttService MqttService
    {
        get { return _mqttService ?? (_mqttService = new MqttService(this)); }
    }

ここで、循環参照の問題 (MqttService-ViewModel) のようなものがあるのではないかと思います。よくわかりませんが、私には良さそうです。

4

2 に答える 2

0

あなたのコードは私にとってはうまくいきますWPF .NET4.0

おそらくあなたのプロパティTxtStatusは決して文字列を取得しません

_txtStatus ="new status"; // wrong
TxtStatus = "new status"; // right

または、何らかの干渉が発生しますx:Name="TxtStatus"が、それは Windows-Phone-7 ベースの問題です。

于 2013-06-14T08:15:12.890 に答える