WPF/Silverlight 常见问题汇总(记录点滴)

1、数据绑定时,实现INotifyPropertyChanged接口时,一定要注意要判断PropertyChanged是否为null,否则容易出exception

2、在调用PropertyChanged事件时,传入的参数sender一定要写this,而不要写new object,在silverlight中,new object()可能没问题,但是在wpf中会有问题,可能不会自动更新UI。

代码如下

    public class BaseModel : INotifyPropertyChanged
    {
        protected void ChangeProperty(string propName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propName));
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }


3、TreeView使用多层Model绑定时,可以使用HierarchicalDataTemplate,然后设置ItemSource,在其中使用Item的MouseLeftButtonDown事件时,可以在HierarchicalDataTemplate中的根元素上使用MouseLeftButtonDown事件来处理,然后根据这个根元素的TemplatedParent来取得TreeViewItem

代码如下:

                        <HierarchicalDataTemplate ItemsSource="{Binding OcSubFolders}">
                            <Grid HorizontalAlignment="Stretch"
                                  VerticalAlignment="Stretch"
                                  MouseLeftButtonDown="Grid_MouseLeftButtonDown">
                            </Grid>
                        </HierarchicalDataTemplate>
        private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            Grid grd = sender as Grid;

            FolderModel folderCurrent = grd.DataContext as FolderModel;

            folderCurrent.OcSubFolders = FolderHelper.GetSubFolders(folderCurrent.FolderPath);

        }




                        <HierarchicalDataTemplate ItemsSource="{Binding OcSubFolders}">
                            <!--
                                <HierarchicalDataTemplate.ItemContainerStyle>
                                <Style TargetType="TreeViewItem">
                                <EventSetter Event="TreeViewItem.MouseLeftButtonDown" Handler="Grid_MouseLeftButtonDown" />
                                </Style>
                                </HierarchicalDataTemplate.ItemContainerStyle>
                            -->
                            <Grid HorizontalAlignment="Stretch"
                                  VerticalAlignment="Stretch"
                                  MouseLeftButtonDown="Grid_MouseLeftButtonDown">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition />
                                    <ColumnDefinition />
                                </Grid.ColumnDefinitions>
                                <Image Grid.Column="0"
                                       Width="32"
                                       Height="32"
                                       Source="/Images/folder.png" />
                                <StackPanel Grid.Column="1">
                                    <StackPanel Orientation="Horizontal">
                                        <TextBlock Text="{Binding FolderName}" />
                                        <TextBlock Text="(" />
                                        <TextBlock Text="{Binding FolderSize, Converter={StaticResource sizeConverter}}" />
                                        <TextBlock Text=")" />
                                    </StackPanel>
                                    <StackPanel>
                                        <TextBlock Text="{Binding SubFolderCount, Converter={StaticResource ResourceKey=folderCountConverter}}" />
                                    </StackPanel>
                                </StackPanel>
                            </Grid>
                        </HierarchicalDataTemplate>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值