Свойство зависимости WPF Grid - PullRequest
0 голосов
/ 22 апреля 2010

Я хочу привязать текст текстового блока в сетке данных WPF к свойству зависимости. Почему-то ничего не отображается, но когда я использую ту же привязку текстового блока вне сетки, все работает нормально. Ниже мой код,

        </Grid.RowDefinitions>

        <StackPanel Grid.Row="0">
            <toolkit:DataGrid Name="definitionGrid" Margin="0,10,0,0" AutoGenerateColumns="False" 
                                              CanUserAddRows="False" CanUserDeleteRows="False" IsReadOnly="False"
                                              RowHeight="25" FontWeight="Normal" ItemsSource="{Binding Subscription}"
                                              ColumnHeaderStyle="{DynamicResource ColumnHeaderStyle}" 
                                              SelectionMode="Single" ScrollViewer.HorizontalScrollBarVisibility="Disabled" Width="450"
                              ScrollViewer.VerticalScrollBarVisibility="Auto" Height="200">          
                    <toolkit:DataGridCheckBoxColumn Header="Email" Width="60" Binding="{Binding ReceivesEmail}" CellStyle="{StaticResource cellCenterAlign}"/>

                    <toolkit:DataGridTemplateColumn Header="Others" Width="220" CellStyle="{StaticResource cellCenterAlign}" IsReadOnly="True">
                        <toolkit:DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding Path=OtherSubs}"/>
                            </DataTemplate>
                        </toolkit:DataGridTemplateColumn.CellTemplate>
                    </toolkit:DataGridTemplateColumn>
                </toolkit:DataGrid.Columns>
            </toolkit:DataGrid>   
            <TextBlock Text="{Binding Path=OtherSubs}"/>
       </StackPanel>

Code-Behind

public string OtherSubs
{
    get { return (string)GetValue(OtherSubsProperty); }
    set { SetValue(OtherSubsProperty, value); }
}
public static readonly DependencyProperty OtherSubsProperty = DependencyProperty.Register("OtherSubs", typeof(string), 
    typeof(ProgramSubscriptions), new UIPropertyMetadata(string.Empty));

        //other....
        for (int i = 0; i < OtherPrgList.Count; i++)
        {
            foreach (int y in myList)
            {
                ProgramSubscriptionViewModel otheritem = OtherPrgList[i];
                if (y == otheritem.Program.ID)
                    OtherSubs += otheritem.Subscriber.Username + ", ";
            }
        }

Пожалуйста, дайте мне знать, если есть другой способ сделать эту работу, вместо использования свойства зависимости, хотя для тестирования я поместил текстовый блок ниже сетки данных, и он работает отлично. Помогите!

Ответы [ 2 ]

2 голосов
/ 22 апреля 2010

Ваше свойство Подписка должно быть коллекцией объектов ProgramSubscription .Он должен поддерживать как минимум интерфейс IEnumerable.Обычно у вас есть что-то вроде Список .Кроме того, OtherSubs , очевидно, является свойством ProgramSubscription , и это нормально.

Не могли бы вы показать, как вы используете "ту же привязку текстового блока вне сетки"?1014 *

0 голосов
/ 22 апреля 2010

Вы привязываете DataGrid к подписке. Это должно быть свойство любого DataContext DataGrid. Как сказал wpfwannabe, он должен поддерживать IEnumerable. В идеале вы должны иметь ObservableCollection<> или производное, поэтому DataGrid обновляется автоматически.

Оттуда DataGrid получит элементы, которые должны отображаться. Для отображения фактических данных у вас есть определение DataGridTemplateColumn. Поскольку вы привязываетесь к OtherSubs, это означает, что объекты, перечисленные вашей подпиской IEnumerable, должны иметь это свойство. Кстати, это не обязательно должно быть свойство зависимости, чтобы это работало.

...