0

MainPage.xaml
<TextBlock Text="{Binding Pathname, Source={StaticResource ViewModel}, Mode=OneWay}" />

App.xaml

<ResourceDictionary>
     <vm:InspectViewModel x:Key="ViewModel" />
</ResourceDictionary>

ビューモデル

private string _pathname = null;
public string Pathname
{
    get { return _pathname; }
    set
    {
        if (_pathname != value)
        {
            _pathname = value;
            RaisePropertyChanged("Pathname");
        }
    }
}

public void UpdatePathname(string path)
{
    Pathname = path;
}

MainPage コードビハインド

private void lazyNavTree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)  
{          
    InspectViewModel vm = new InspectViewModel();        
    var path = view.GetPath().ToArray();
    string pathname = null;
    // to figure out what the pathname is
    for (int i = 0; i < path.Count(); i++)
    {
        TreeList treeItem = (TreeList)path[i].Key;
        if (i == path.Count()-1)
            pathname = pathname + treeItem.Name;
        else
            pathname = pathname + treeItem.Name + " : ";
    }
    vm.UpdatePathname(pathname);
}

バインドされた TextBlock には、nada、zip は何も表示されません。パス名ソースは正しく変更されていますが、変更時に INotifyPropertyChanged イベントを発生させても何も起こらないようです。

本当に明らかな何かが欠けていると確信していますが、何がわかりません!

4

3 に答える 3

4

ViewModel の 2 つのインスタンスを作成しています。

  • App.xaml 内 (アプリ リソースでは、これはバインドされるインスタンスです)
  • MainPage 分離コード ( InspectViewModel vm = new InspectViewModel()、これは変更されたインスタンスです)

たとえば、ViewModel の単一のインスタンスを使用する必要があります。

var vm = (InspectViewModel)Application.Current.Resources["ViewModel"];

MainPage コード ビハインドで作成する代わりに。

于 2012-07-31T11:29:37.180 に答える
2

これは、lazyNavTree_SelectedItemChanged で毎回ビューモデルからインスタンスを作成するためです。1 つだけ使用してください。

于 2012-07-31T11:31:41.770 に答える
0

バインディングでパスを見逃したようです。試してみてください。

Text="{Binding Path=Pathname, Source={StaticResource ViewModel}, Mode=OneWay}"

編集:明らかにこれは問題ではありませんでしたが、xhedgepigx が以下のコメントとして有用なリンクを提供したため、この回答を維持します。

于 2012-07-31T11:27:57.477 に答える