2012-09-26 4 views
1

Я знаю, что на этот вопрос уже был дан ответ, но, глядя на большинство из них, они используют код позади, и я понимаю, что в MVVM никогда не бывает нормально, а другие используют шаблон MVVM. Я отказываюсь использовать образец, который я хочу изучить с нуля. Я могу связать ItemsSource правильно, но как мне привязать к заголовкам datagrid и тому подобное.Динамический datagrid, необязательные столбцы

Я бы подумал, что это распространено, но я хочу, чтобы иметь «таблицу» данных с заголовками. Я хочу, чтобы пользователь мог щелкнуть правой кнопкой мыши в строке заголовка и включить и выключить столбцы. В этой части я не так беспокоюсь о том, как это сделать.

Я спрашиваю, как иметь datagrid с динамическими столбцами/заголовками без codebehind или рамки. Я не уверен, как привязать с viewmodel к datagrid.

+1

WPF * * является основой. Также .NET. Не поддавайтесь «правильности»; использовать лучшие практики, но умерить их с некоторым здравым смыслом. –

+0

Я понимаю, я просто не хочу попадать в ловушку, я не знаю, как это сделать, поэтому я просто использую вспомогательную структуру, чтобы сделать это для меня. Я имел в виду рамки, такие как свет MVVM и т. Д. – AnthonyFG

+0

* «Я нахожусь в понимании, что в MVVM никогда не бывает нормально», это просто неправильно. Правильные утверждения состоят в том, что «это редко необходимо». –

ответ

0
<DataGrid AutoGenerateColumns="False" Height="256" HorizontalAlignment="Left" Name="dgEmp" VerticalAlignment="Top" Width="490" ItemsSource="{Binding DeleteData,Mode=TwoWay}" Margin="6,7,0,0" Grid.RowSpan="3"> 
        <DataGrid.Columns> 
         <DataGridTextColumn Header="ID" Binding="{Binding ID,Mode=TwoWay}" IsReadOnly="True" Visibility="Hidden"/> 
         <DataGridTextColumn Header="Description" Binding="{Binding Description,Mode=TwoWay}" IsReadOnly="True"/> 
         <DataGridTextColumn Header="Amount" Binding="{Binding Amount,Mode=TwoWay}" IsReadOnly="True"/> 
         <DataGridTextColumn Header="Date" Binding="{Binding Date,Mode=TwoWay}" IsReadOnly="True"/> 
         <DataGridTextColumn Header="Remark" Binding="{Binding Remark,Mode=TwoWay}" IsReadOnly="True"/> 
         <DataGridTemplateColumn> 
          <DataGridTemplateColumn.CellTemplate> 
           <DataTemplate> 
            <Button Content="Update" x:Name="btnUpdate" 
          Click="btnUpdate_Click"></Button> 
           </DataTemplate> 
          </DataGridTemplateColumn.CellTemplate> 
         </DataGridTemplateColumn> 
        </DataGrid.Columns> 
       </DataGrid> 

В этом примере ItemSource из DataGrid является DeleteData, который является одним ObservableCollection<Expense_Submit>

Expense_Submit один класс в том, что я определил все свойства .it выглядят как

public class Expense_Submit 
{ 


private int _ID; 

    private string _UserID; 

    private string _Description; 

    private string _Amount; 

    private DateTime _Date; 

    private string _Remark; 


    } 
+0

Спасибо, поэтому я заметил, что у вас есть Visibility = «Hidden» для заголовка ID. Как связать свойство Видимость, чтобы включать и выключать столбцы? – AnthonyFG

+0

ya in datagrid Я не хочу показывать этот coloum, поэтому я его спрятал. –

+0

ohk вам нужно создать одно свойство, например –

0

Для этого вы должны привязать свойство видимости.

Visibility={binding IDVisibile,mode=TwoWay} 

в вашем ViewModel Создать одно свойство

private Visibility _IDVisibile; 

      public Visibility IDVisibile 
      { 
       get { return _BorderVisibility; } 
       set { _BorderVisibility = value; RaisePropertyChanged("IDVisibile"); } 
      } 
+0

Спасибо, это имеет смысл. – AnthonyFG

+0

Если у вас есть время, я не могу заставить его скрывать столбец, я могу видеть, когда он витает над IDVisible в xaml, что он настроен на скрытие, и я вызываю свойство изменено, но столбец никогда не исчезает, что может привести к этому ? – AnthonyFG

+0

AnthonyFG

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