tags:

views:

40

answers:

1

In WindowViewModel There is a property called statusBar

In StatusBarViewModel , There is a property called public BatteryIndicatorViewModel batIndicatorViewModel

In BatteryIndicatorViewModel , There is a property called public bool IsLowBattery

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

IsLowBattery property is bound to CheckBox, in window2 and which is bound to WindowViewModel

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

It shows the following error:- System.Windows.Data Error: 39 : BindingExpression path error: 'statusBar' property not found on 'object' ''StatusBarViewModel' (HashCode=25431989)'. BindingExpression:Path=statusBar.batIndicatorViewModel.IsLowBattery; DataItem='StatusBarViewModel' (HashCode=25431989); target element is 'ContentControl' (Name=''); target property is 'NoTarget' (type 'Object')


Code.....

Window2.xaml.. I have a HeaderedItemsControl in Window2.xaml which is bound to workspaces

<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 which is bound to window2 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;
}

BatteryIndicatorViewModel.cs..

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

Now my question is how do I bind IsCharging in BatteryIndicatorViewModel to low battery checkbox in windowviewmodel

A: 

The error is telling you that the DataContext of the element where the Binding is being used is already set to a StatusBarViewModel, most likely the statusBar property. You should be able to remove the "statusBar." from the beginning of your Binding Path and get what you're looking for.

John Bowen
statusBar property is an instance of StatusBarViewModel in WindowViewModel which is bound to window2.if i write batIndicatorViewModel.IsLowBattery it throws error : BindingExpression path error: 'batIndicatorViewModel' property not found on 'object' 'WindowViewModel '
suman
Can you post more of your code? There isn't enough in these two fragments to indicate a specific problem.
John Bowen
i am unable to post the whole code.
suman
Based on this new code, and assuming all of those declarations are actually properties and not fields in your real code, the proper Binding Path should be StatusBarVM.BatteryIndicatorVM.IsCharging
John Bowen
thanks john it worked
suman