2010-07-30 71 views
0

在WindowViewModel 有一个名为状态栏。绑定一个子类属性

在StatusBarViewModel财产,有一个叫 公共BatteryIndi​​catorViewModel batIndicatorViewModel

在BatteryIndi​​catorViewModel财产,有一个叫物业 公共BOOL IsLowBattery

<MultiDataTrigger.Conditions> 
<Condition Binding="{Binding statusBar.batIndicatorViewModel.IsLowBattery}" Value="true" /> 
</MultiDataTrigger.Conditions> 

IsLowBattery属性绑定到CheckBox,在window2中绑定到WindowVi ewModel

<CheckBox IsChecked="{Binding Path=statusBar.batIndicatorViewModel.IsLowBattery}" Content="Low Battery" Grid.Column="2" Margin="0,0,34.743,14.04" Grid.Row="1" /> 

它显示以下错误: - System.Windows.Data错误:39:BindingExpression路径错误: '的状态栏' 属性不是 '对象' '' StatusBarViewModel '(的HashCode = 25431989)' 中找到。 BindingExpression:路径= statusBar.batIndicatorViewModel.IsLowBattery; DataItem ='StatusBarViewModel'(HashCode = 25431989);目标元素是'ContentControl'(Name ='');目标属性是 'NoTarget'(类型为 'Object')


代码.....

Window2.xaml .. 我在Window2.xaml一个HeaderedItemsControl这势必工作区

<Grid> 
<HeaderedItemsControl ItemsSource="{Binding Path=Workspaces}" Header="StatusBar" /> 
<CheckBox IsChecked="{Binding statusBar.batIndicatorViewModel.IsLowBattery}" Content="Low Battery" Grid.Column="2" Margin="0,0,34.743,14.04" Grid.Row="1" /> 
<CheckBox IsChecked="{Binding statusBar.batIndicatorViewModel.IsCharging}" Content="Charging" Grid.Column="1" Grid.ColumnSpan="2" Height="15.96" Margin="5.76,0,48.67,0" Grid.Row="2" VerticalAlignment="Top" /> 
</Grid> 

WindowViewModel.cs ..

WindowViewModel这势必窗口2的datacontext

public class WindowViewModel:WorkspaceViewModel 
{ 
public ObservableCollection<WorkspaceViewModel> Workspaces   

    public StatusBarViewModel StatusBarVM; 

    private void ShowStatusBar() 
      {    
       StatusBarVM = new StatusBarViewModel(); 
       this.Workspaces.Add(StatusBarVM); 
       this.SetActiveWorkspace(StatusBarVM);    
      } 

StatusBar.xaml ..

<usercontrol> 
<Grid Background="Black" Height="20" Width="240"> 
<vw:BatteryIndicator Height="20" Width="30" IsTabStop="False" VerticalAlignment="Top" HorizontalAlignment="Right" Grid.Column="1"/> 
<!—some other usercontrols are used here -- > 
</Grid> 
</UserControl> 

StatusBarViewModel.cs ..

public class StatusBarViewModel : WorkspaceViewModel 
    { 
public BatteryIndicatorViewModel BatteryIndicatorVM; 
} 

BatteryIndi​​catorViewModel.cs ..

public class BatteryIndicatorViewModel : WorkspaceViewModel 
    { 
Public bool IsCharging; 
public bool IsLowBattery; 
} 

现在我的问题是我怎么绑定IsCharging在BatteryIndi​​catorViewModel到windowviewmodel的低电池复选框

+0

你是否将Window.DataContext设置为WindowViewModel? – 2010-07-30 15:56:04

+0

是的我已经将datacontext设置为windowViewModel – suman 2010-08-03 06:33:51

回答

0

错误是告诉你正在使用绑定的元素的DataContext已经设置为StatusBarViewModel,最有可能是statusBar属性。你应该可以删除“statusBar”。从你的绑定路径开始,并得到你要的东西。

+0

statusBar属性是在WindowViewModel中的StatusBarViewModel实例,它绑定到window2.if我写batIndicatorViewModel.IsLowBattery它会引发错误:BindingExpression路径错误:'对象'上找不到'batIndicatorViewModel'属性WindowViewModel' – suman 2010-07-30 12:27:39

+0

你能发布更多的代码吗?这两个片段中没有足够的东西来表示具体的问题。 – 2010-07-30 15:17:54

+0

我无法发布整个代码。 – suman 2010-08-03 06:37:33