locked
請問如何 DataBinding 到一個 物件 本身而不是其中一個屬性? RRS feed

  • 問題

  • 我有一個自定的 類別叫 NewsData,裡面有一些屬性(當然)

    我的ListBox的ItemTemplate如下

    <ListBox.ItemTemplate>
     <DataTemplate>
      <Border BorderBrush="Gray" Margin="2" BorderThickness="0,0,0,2">
       <StackPanel Orientation="Vertical" Margin="5,5,5,5">
        <TextBlock Text="{Binding Date, Converter={StaticResource DateTimeToStringConverter}, ConverterParameter='yyyy/MM/dd HH:mm:ss'}" Foreground="#FFECED36"/>
        <TextBlock Text="{Binding Caption}" Margin="0,10,0,0" TextWrapping="Wrap" Style="{StaticResource PhoneTextNormalStyle}"/>
       </StackPanel>
      </Border>
     </DataTemplate>
    </ListBox.ItemTemplate>
    
    是否有可能將{Binding Date} 改成 Binding到NewsData這個類別本身呢?

    2010年11月11日 上午 05:37

解答

  • Hi FatJohn:

    如果要使用Binding到屬性的話, 有一個前提, 就是必須為依賴屬性(DepenecyProperty), 才能夠被使用

    因此你必須將你的NewsData設為依賴屬性,

     如下範例, 若還有不清楚可以上MSDN查閱

            
        public class NewsData:DependencyObject
        {
    public static readonly DependencyProperty CustDateProperty =
                DependencyProperty.Register("CustDate"typeof(DateTime), typeof(ClassName), new PropertyMetadata(DateTime.Now));
            public DateTime CustDate
            {
                get { return (DateTime) GetValue(CustDateProperty); }
                set { SetValue(CustDateProperty, value); }
            }
    }
     <TextBlock Text="{Binding CustDate, Converter={StaticResource DateTimeToStringConverter}, ConverterParameter='yyyy/MM/dd HH:mm:ss'}" Foreground="#FFECED36"/>
    

     

    Hugo

    2010年11月11日 上午 05:44
  • 是否有可能將{Binding Date} 改成 Binding到NewsData這個類別本身呢?

    在 SL4 (v4以前不清楚)

    不指定屬性可以用 Converter

    ex:<TextBlock Text="{Binding Converter={StaticResource NameConverter}}" />

    另外也可以用 . 代替屬性。Text="{Binding}" 等同 Text="{Binding Path=.}" .

    ex: <TextBlock Text="{Binding ., Converter={StaticResource NameConverter}}" />

    <TextBlock Text="{Binding Path=.,Converter={StaticResource NameConverter}}" />

    2010年11月11日 下午 06:17

所有回覆

  • Hi FatJohn:

    如果要使用Binding到屬性的話, 有一個前提, 就是必須為依賴屬性(DepenecyProperty), 才能夠被使用

    因此你必須將你的NewsData設為依賴屬性,

     如下範例, 若還有不清楚可以上MSDN查閱

            
        public class NewsData:DependencyObject
        {
    public static readonly DependencyProperty CustDateProperty =
                DependencyProperty.Register("CustDate"typeof(DateTime), typeof(ClassName), new PropertyMetadata(DateTime.Now));
            public DateTime CustDate
            {
                get { return (DateTime) GetValue(CustDateProperty); }
                set { SetValue(CustDateProperty, value); }
            }
    }
     <TextBlock Text="{Binding CustDate, Converter={StaticResource DateTimeToStringConverter}, ConverterParameter='yyyy/MM/dd HH:mm:ss'}" Foreground="#FFECED36"/>
    

     

    Hugo

    2010年11月11日 上午 05:44
  • 唔~可是 NewsData 就是一個Class,原本是有打算做一個Property出來把 this 丟出來當做一個屬性,不過這樣做感覺很怪...

    另外,其實不只定Binding的屬性的話,其實就可以Binding到NewsData本身,但是不只定屬性就沒辦法搭配ValueConverter

    2010年11月11日 上午 05:50
  • 是否有可能將{Binding Date} 改成 Binding到NewsData這個類別本身呢?

    在 SL4 (v4以前不清楚)

    不指定屬性可以用 Converter

    ex:<TextBlock Text="{Binding Converter={StaticResource NameConverter}}" />

    另外也可以用 . 代替屬性。Text="{Binding}" 等同 Text="{Binding Path=.}" .

    ex: <TextBlock Text="{Binding ., Converter={StaticResource NameConverter}}" />

    <TextBlock Text="{Binding Path=.,Converter={StaticResource NameConverter}}" />

    2010年11月11日 下午 06:17