Переменная количество строк сетки с MVVM - PullRequest
2 голосов
/ 01 июля 2010

Мне нужно контролировать количество строк в сетке.Не используя шаблон MVVM, я достиг этого с помощью code-behind, вот так:

<UserControl>
    <Grid x:Name="PART_Host" />
</UserControl>

private void UpdateHost(int rowCount) {
    PART_Host.RowDefinitions.Clear();
    PART_Host.Children.Clear();

    for (int i = 1; i <= rowCount; i++) {
        PART_Host.RowDefinitions.Add(new RowDefinition());
        Grid.SetRow(PART_Host.Children[index], i - 1);
    }
}

Теперь мне нужно сделать это, используя шаблон MVVM.Я могу получить доступ к необходимому свойству rowCount в своей модели представления, но как я могу обновить представление, когда это свойство изменяется?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 01 июля 2010

Вы пробовали приложенные свойства?Я не уверен, но вы можете сделать что-то вроде этого:

    public class GridExtensions
    {
        public static Int32 GetGridRowCount(DependencyObject obj)
        {
            return (Int32)obj.GetValue(GridRowCountProperty);
        }

        public static void SetGridRowCount(DependencyObject obj, UIElementCollection value)
        {
            obj.SetValue(GridRowCountProperty, value);
        }

        // Using a DependencyProperty as the backing store for GridRowCount.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty GridRowCountProperty =
            DependencyProperty.RegisterAttached("GridRowCount", typeof(Int32), typeof(Grid), new FrameworkPropertyMetadata(OnGridRowCountChanged));

        public static void OnGridRowCountChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
        {
            if (e.NewValue != null && obj is Grid)
            {
                Int32 rowCount = (Int32)e.NewValue;
                Grid grid = (Grid)obj;

                grid.RowDefinitions.Clear();
                grid.Children.Clear();

                for (int i = 1; i <= rowCount; i++)
                {
                    grid.RowDefinitions.Add(new RowDefinition());
                    Grid.SetRow(grid.Children[index], i - 1);
                }
            }
        }
    }

И использовать это как:

<Grid local:GridExtensions.GridRowCount="10"></Grid>
1 голос
/ 01 июля 2010

Если RowDefinition является свойством зависимости, вы можете создать свойство RowDefinition [] RowDefinitions и вернуть массив определений строк с длиной RowCount и связать этот массив со свойством RowDefinition, если нет, то вы должны создать свой usercontrol, используя ItemsControl для отображения что ты хочешь ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...