2015-04-30 4 views
0

Я создаю приложение, использующее wpf в .NET framework (используя визуальную студию). У меня есть объект «Пользователь», объект представляет собой различные свойства: 1. Название VARCHAR 2. IsCanRead 3. IsCanWriteобъект не обновляется «на лету»

2-й и 3-й свойства управления, может ли пользователь читать или писать, или обоих. Они привязаны к флажкам. В соответствии с установленными флажками на другом экране отображаются 3 выпадающих списка. 1. Раскрывающийся список состоит из людей, которые могут читать 2. dropdown 2 состоит из людей, которые могут писать 3 В третьем выпадающем списке указаны имена тех, кто может делать как

теперь, когда я изменяю какое-либо свойство для объекта, мне нужно перезагрузить экран, чтобы увидеть изменения. Может ли кто-нибудь помочь мне и рассказать мне, как я могу убедиться, что пользователю не нужно перезагружать экран? и изменения немедленно отражаются?

Ниже приведен XAML код

 <DataGrid.Columns> 
    <DataGridTemplateColumn Header="Name" Width="Auto" SortMemberPath="Name"> 
    <DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
    <TextBlock Text="{Binding Path=Name}" /> 
    </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
    <DataGridTemplateColumn.CellEditingTemplate> 
    <DataTemplate> 
    <TextBox Text="{Binding Path=Name}"> 
    <i:Interaction.Behaviors> 
             <behavior:AllowableCharactersTextBoxBehavior RegularExpression="^[a-zA-Z0-9 ]*$" MaxLength="50"/> 
</i:Interaction.Behaviors> 
</TextBox> 
</DataTemplate> 
</DataGridTemplateColumn.CellEditingTemplate> 
</DataGridTemplateColumn> 
<DataGridTemplateColumn Header="Can Read?" SortMemberPath="IsCanRead"> 
<DataGridTemplateColumn.CellTemplate> 
<DataTemplate> 
<CheckBox IsChecked="{Binding Path=IsCanRead}" IsEnabled="False" /> 
</DataTemplate> 
</DataGridTemplateColumn.CellTemplate> 
    <DataGridTemplateColumn.CellEditingTemplate> 
          <DataTemplate> 
           <CheckBox IsChecked="{Binding Path=IsCanRead, UpdateSourceTrigger=PropertyChanged}"/> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellEditingTemplate> 

      <DataGridTemplateColumn Header="Can Write?" SortMemberPath="IsCanWrite"> 
         <DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <CheckBox IsChecked="{Binding Path=IsCanWrite}" IsEnabled="False" /> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellTemplate> 
         <DataGridTemplateColumn.CellEditingTemplate> 
          <DataTemplate> 
    <CheckBox IsChecked="{Binding Path=IsCanWrite, UpdateSourceTrigger=PropertyChanged}"/> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellEditingTemplate> 
+0

IsCanRead и IsCanWrite принимают булевы значения, поскольку они связаны с флажками – Manika

+1

Показать фактический класс и фактические привязки, найденные в Xaml, сохраняя их как сжатые, но не заполненные ненужной информацией, такой как параметры Width в Xaml. – OmegaMan

ответ

1

Я должен перезагрузить экран, чтобы увидеть изменения

Перезарядка всего объекта предполагают, что либо класс, который имеет значения не реализуйте INotifyPropertyChanged или что привязки в Xaml могут быть установлены Mode на TwoWay, чтобы любые изменения сохранялись в синхронизации как спереди назад, так и наоборот.

Пример INotifyProperty использования требуется

private bool _IsCanRead; 

public bool IsCanRead 
{ 
    get { return _IsCanRead; } 
    set { _IsCanRead= value; OnPropertyChanged("IsCanRead"); } 
} 

Пример режима TwoWay связывания:

<CheckBox IsChecked="{Binding Path=IsCanRead, 
           Mode=TwoWay 
           UpdateSourceTrigger=PropertyChanged}"/> 
+0

Если я изменяю имя пользователя, оно отражается на другом экране «на лету», но это не работает для других. – Manika

+0

@ Manika Пожалуйста, покажите свой код Xaml, который связывается с классом и покажет привязку Xaml, чтобы мы могли попытаться воспроизвести. :-) – OmegaMan

+0

Это не работает :( – Manika

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