如何在mvvm中绑定父或其他viewmodel属性wpf

时间:2015-07-03 07:39:39

标签: c# wpf xaml mvvm

您好我已经在My BookViewVM中定义了属性

   private Visibility _isLoaderPageView = Visibility.Hidden;
    public Visibility IsLoaderPageView
    {
        get
        {
            return _isLoaderPageView;
        }
        set
        {
            _isLoaderPageView = value;
            RaisePropertyChanged("IsLoaderPageView");
        }
    }

我在Page.xaml页面上调用了这本bookViewVM,但在Page.xaml上,其他一些PageViewVM已经绑定但是我必须调用BookViewVM属性:

<views:LoadingAnimation  x:Name="ldrControl"  Margin="100,100,100,150"   Visibility="{Binding IsLoaderPageView}"   />

我可以在My Pageview.xaml.cs代码上访问此BookViewVM属性,如下所示:  ETBApp.MainVM.BookVM.IsLoaderPageView

但我必须在页面上的Property binding中调用它。 请告诉我如何绑定它。

ViewModel就像BookViewVm和PageViewVm一样在同一个名称上。

2 个答案:

答案 0 :(得分:1)

问题是您有多个DataContexts ,默认情况下 Binding 与当前元素的 DataContext 一起使用(如果已指定)和datacontext如果没有父母(等等)。

所以有2个简单的解决方案:

  • 直接指定元素的 DataContext (仅当该元素没有元素时)
  • 使用 ElementName (如果您在 xaml 中有权访问特定元素,则必须通过 Name x正确命名:名称)或 RelativeSource (如果您绑定到某些祖先)在绑定路径 < / LI>

答案 1 :(得分:0)

只需正确设置DataContext。 例如在网格

<Grid.DataContext>
  <viewmodel:YourViewModel />
</Grid.DataContext>

现在你可以绑定它了

<ItemsControl ItemsSource="{Binding Model.ButtonsRaw1}">

我们从模型中绑定ItemsSource。

或者你有另一种方法从资源中做到这一点。这样的东西

<UserControl.Resources>
        <Style TargetType="local:YourType">
            <Setter Property="Text" Value="{Binding Path=DataContext.Model.Text, Mode=TwoWay,ElementName=YourGridName}"/>
        </Style>
</UserControl.Resources>