У меня есть приложение WPF, у которого есть MainWindow, который разделен на 2 кадра один для левого меню навигации, а другой для страниц (например, страница addFirm, addlocation страница и т. д.). Теперь я хочу, чтобы в главном окне была строка состояния, в которой должны отображаться сообщения, поднятые на страницах. Что-то вроде этогоСвязывание текстового свойства текстового блока в StatusBar с разных страниц
<DockPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch" LastChildFill="True" >
<StackPanel DockPanel.Dock="Top" Style="{DynamicResource SMMainStackPanel}" >
<Border Style="{DynamicResource SMBorder}" >
<Label Content="System" FontSize="18" HorizontalContentAlignment="Center" />
</Border>
</StackPanel>
<StackPanel DockPanel.Dock="Left" Style="{DynamicResource SMMainStackPanel}">
<Border VerticalAlignment="Stretch" Style="{DynamicResource SMBorder}" >
<Frame Name="frame1" Source="Menu.xaml" Style="{DynamicResource SMMainFrame}" />
</Border>
</StackPanel>
<StackPanel Style="{DynamicResource SMMainStackPanel}" >
<Border Style="{DynamicResource SMBorder}" >
<Frame Name="frame2" Style="{DynamicResource SMMainFrame}"/>
</Border>
<DockPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch" DockPanel.Dock="Bottom">
<StatusBar>
<StatusBar.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="4*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</StatusBar.ItemsPanel>
<StatusBarItem>
<TextBlock>Ready</TextBlock>
</StatusBarItem>
<StatusBarItem Grid.Column="1">
<ProgressBar Value="30" Width="80" Height="18"/>
</StatusBarItem>
<StatusBarItem Grid.Column="2">
<TextBlock Text= "ABC" />
</StatusBarItem>
<StatusBarItem Grid.Column="3">
<TextBlock Text="{Binding Source={x:Static sys:DateTime.Now}}"/>
</StatusBarItem>
</StatusBar>
</DockPanel>
</StackPanel>
</DockPanel>
Теперь я хочу, чтобы заполнить StatusBarItem из свойства сообщений приведенного ниже класса вместо статического текста «ABC». PS: obejct этого класса создается на indivisual страницах, а не на главном окне
public class StatusHelper : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _message;
private void OnPropertyChanged(String property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
public string Message
{
get
{
return _message;
}
set
{
_message = value;
OnPropertyChanged("Message");
}
}
}
создать объект этого класса на indivisual страниц, а затем, когда операция будет завершена, то, как я установить свойство сообщения этого класса.
Единственная ссылка, которую мне не хватает, заключается в том, как я могу получить экземпляр этого класса, который установлен на странице (предположим, предположим, что на addlocation) на mainwindow.xaml. Также как связать этот экземпляр с текстовым свойством текстовой области.
Спасибо за ваш ответ. На панели выше не установлен набор данных.Также проблема заключается в том, что объект класса StatusHelper создается на уровне страницы, и я не могу понять, как я могу получить доступ к этому в главном окне. Другой вариант, о котором я думал, состоял в том, чтобы использовать статический класс и снова устанавливать свойства, я снова застреваю при доступе к объекту этого класса. Вариант, который приходит мне на ум, состоит в том, чтобы создать общий элемент управления для строки состояния, а затем использовать его на каждой странице, однако это не выглядит привлекательным для меня в данный момент. – Rachit
У вас есть MainWindow, который должен отображать содержимое страницы, а также сообщение о статусе текущей страницы. Затем просто сохраните ссылку на модель представления текущей страницы в представлении-модели (контексте данных) MainWindow, например, как свойство CurrentPage. Тогда привязка будет: {Binding CurrentPage.Status.Message}. Вы знакомы с MVVM? –