2016-08-31 3 views
0

На моей странице приложения WPF У меня есть 2 привязок 1. для списка элементов в качестве наблюдаемой коллекции 2. просто, чтобы показать некоторые значения на звукозаписывающей компанией с использованием связыванияWPF Binding этикетки со свойствами

Мой класс-структуру как этот

public DbVersionModel DbVersion { get; set; } 
    public ObservableCollection<BookStore> StoreCollection 
    { get { return thisApp.app_Stores; } } 


public class DbVersionModel : INotifyPropertyChanged 
{ 
    private int _LocalVersion { get; set; } 
    private int _ServerVersion { get; set; } 
    private int _ActiveStores { get; set; } 
    private string _LastModifiedLocal { get; set; } 
    private string _LastModifiedServer { get; set; } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyChange(PropertyChangedEventArgs e) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, e); 
    } 

    public int LocalVersion 
    { 
     get { return _LocalVersion; } 
     set 
     { 
      _LocalVersion = value; 
      NotifyChange(new PropertyChangedEventArgs("LocalVersion")); 
     } 
    } 

    public int ServerVersion 
    { 
     get { return _ServerVersion; } 
     set 
     { 
      _ServerVersion = value; 
      NotifyChange(new PropertyChangedEventArgs("ServerVersion")); 
     } 
    } 

    public int ActiveStores 
    { 
     get { return _ActiveStores; } 
     set 
     { 
      _ActiveStores = value; 
      NotifyChange(new PropertyChangedEventArgs("ActiveStores")); 
     } 
    } 

    public string LastModifiedLocal 
    { 
     get { return _LastModifiedLocal; } 
     set 
     { 
      _LastModifiedLocal = value; 
      NotifyChange(new PropertyChangedEventArgs("LastModifiedLocal")); 
     } 
    } 

    public string LastModifiedServer 
    { 
     get { return _LastModifiedServer; } 
     set 
     { 
      _LastModifiedServer = value; 
      NotifyChange(new PropertyChangedEventArgs("LastModifiedServer")); 
     } 
    } 
} public ManagePage() 
{ 
    InitializeComponent(); 
    setContext(); 
} 
private void setContext() 
{ 
    try 
    { 

     DbVersionModel db_version = new DbVersionModel(); 

     db_version.LastModifiedServer = //set with value; 
     db_version.ServerVersion = //set with value; 

     db_version.LocalVersion = //set with value; 
     db_version.LastModifiedLocal = //set with value; 

     db_version.ActiveStores = //set with value; 
     this.DbVersion = db_version; 

    } 
    catch 
    { 

    } 
} 

XAML, как этот

<Page x:Class="App.ManagePage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    DataContext="{Binding RelativeSource={RelativeSource Self}}" 
    mc:Ignorable="d"> 
<Page.Resources> 

</Page.Resources> 
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" > 
    <Grid Margin="5 10"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="150"></ColumnDefinition> 
          <ColumnDefinition ></ColumnDefinition> 
         </Grid.ColumnDefinitions> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto"></RowDefinition> 
          <RowDefinition Height="Auto"></RowDefinition> 
          <RowDefinition Height="Auto"></RowDefinition> 

          <RowDefinition Height="Auto"></RowDefinition> 
          <RowDefinition Height="Auto"></RowDefinition> 
          <RowDefinition Height="Auto"></RowDefinition> 

          <RowDefinition Height="Auto"></RowDefinition> 
         </Grid.RowDefinitions> 
         <!--// --> 
         <Label Content="Active stores[Local]" Grid.Column="0" Grid.Row="0" ></Label> 
         <Label Content="{Binding Source=DbVersion, Path=ActiveStores}" Grid.Column="1" Grid.Row="0" ></Label> 

         <Label Content="Current version [Local]" Grid.Column="0" Grid.Row="1" ></Label> 
         <Label Content="{Binding Source=DbVersion, Path=LocalVersion}" Grid.Column="1" Grid.Row="1" ></Label> 

         <Label Content="Curretn Version [Server]" Grid.Column="0" Grid.Row="2" ></Label> 
         <Label Content="{Binding Source=DbVersion, Path=ServerVersion}" Grid.Column="1" Grid.Row="2" ></Label> 

         <Label Content="Last modified [Local]" Grid.Column="0" Grid.Row="3" ></Label> 
         <Label Content="{Binding Source=DbVersion, Path=LastModifiedLocal}" Grid.Column="1" Grid.Row="3" ></Label> 

         <Label Content="Last modified [Server]" Grid.Column="0" Grid.Row="4" ></Label> 
         <Label Content="{Binding Source=DbVersion, Path=LastModifiedServer}" Grid.Column="1" Grid.Row="4" ></Label> 

         <StackPanel Grid.Column="0" Grid.ColumnSpan="5" Grid.Row="6" HorizontalAlignment="Center"> 
          <Button Name="btnSync" Content="Sync stores" Height="30" Click="btnSync_Click" Style="{StaticResource ActionButtons}"></Button> 
         </StackPanel> 
        </Grid> 
    </ScrollViewer> 

Также есть ItemsControl, который становится загружен, как это и связывание работает п ine здесь

<ItemsControl Name="StoreListView" ItemsSource="{Binding StoreCollection}" Margin="5" VirtualizingStackPanel.IsVirtualizing="True" 
        VirtualizingStackPanel.VirtualizationMode="Recycling" > 

Но привязка списка ObservableCollection прекрасна, но привязки меток не работают. Как я могу это решить?

Как я могу установить связывание на этикетке на основе свойств класса

ответ

0

Я думаю, что WPF не замечает изменение DbVersion собственности, потому что вы установите его после вызова InitializeComponent(). Либо вы реализуете его как DependencyProperty, который автоматически уведомляет об изменении (см.: https://msdn.microsoft.com/en-us/library/ms750428(v=vs.110).aspx), либо вы используете интерфейс INotifyPropertyChanged в своем классе ManagePage (см.: https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx).

+0

Или вызовите 'setContext();' перед 'InitializeComponent();' в конструкторе 'ManagePage'. –

+0

Я изменил свою модель с событием изменения InotifyProperty, которое пока не отображается –

+0

Вам также нужно реализовать 'INotifyPropertyChanged' в вашем классе' ManagePage'. В вашей реализации только «DbVersionModel» уведомляет, изменяется ли одно из его свойств. Вы должны удалить класс 'ManagePage', если свойство' DbVersion' изменится. – rbr94

Смежные вопросы