Как связать целое число с шаблоном WPF - PullRequest
0 голосов
/ 15 марта 2012

Я не могу связать целочисленную переменную с шаблоном.

Мой код C # выглядит следующим образом:

    class Task
{
    public string name;
    public string desc;
    public int pr;

    public string TaskName
    {
        get { return name; }
        set { name = value; }
    }

    public string Description
    {
        get { return desc; }
        set { desc = value; }
    }

    public int Priority
    {
        get { return pr; }
        set { pr = value; }
    }

    public Task(string name, string description, int pr)
    {
        this.TaskName = name;
        this.Description = description;
        this.Priority = pr;
    }
}

, а код XAML -

        <DataTemplate x:Key="myTaskTemplate">
        <Border Name="border" BorderBrush="DarkSlateBlue" BorderThickness="2" 
  CornerRadius="2" Padding="5" Margin="5">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition/>
                    <RowDefinition/>
                    <RowDefinition/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Row="0" Grid.Column="0" Padding="0,0,5,0" Text="Task Name:"/>
                <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=TaskName}"/>
                <TextBlock Grid.Row="1" Grid.Column="0" Padding="0,0,5,0" Text="Description:"/>
                <TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Path=Description}"/>
                <TextBlock Grid.Row="2" Grid.Column="0" Padding="0,0,5,0" Text="Priority:"/>
                <TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Path=Priority}"/>
            </Grid>
        </Border>
    </DataTemplate>

Теперь всегда есть «0» для столбца Приоритет.Другие переменные привязки отображаются правильно, но они являются строками.

Ответы [ 2 ]

1 голос
/ 19 марта 2012

Вы не сделали ничего плохого, но проверьте свой код, потому что в некоторых случаях приоритет перезаписывается, иначе подсказка о том, что ваша другая привязка работает нормально, не забудьте изменить привязку во всех свойствах, чтобы like ControlProperty = "{Binding ClassProperty, UpdateSourceTrigger = PropertyChanged}"

1 голос
/ 16 марта 2012

Обычно ViewModel должен реализовывать INotifyPropertyChanged для распространения изменений свойств в представлении.

При этом ваш класс должен выглядеть следующим образом:

class Task : INotifyPropertyChanged
{
    public string name;
    public string desc;
    public int pr;

    public string TaskName
    {
        get { return name; }
        set 
        { 
            name = value;
            OnPropertyChanged("TaskName"); 
        }
    }

    public string Description
    {
        get { return desc; }
        set 
        { 
            desc = value; 
            OnPropertyChanged("Description"); 
        }
    }

    public int Priority
    {
        get { return pr; }
        set 
        {
            pr = value;
            OnPropertyChanged("Priority"); 
        }
    }

    public Task(string name, string description, int pr)
    {
        this.TaskName = name;
        this.Description = description;
        this.Priority = pr;
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged(string pName)
    {
        var handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(pName));
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...