我可以在 WinRT / Windows 8 Store 应用程序中绑定 DynamicObject

2024-05-05

我有以下代码:

    public class MyClass: DynamicObject, INotifyPropertyChanged
    {
    Dictionary<string, object> properties = new Dictionary<string, object>();

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        if (properties.ContainsKey(binder.Name))
        {
            result = properties[binder.Name];
            return true;
        }
        else
        {
            result = "Invalid Property!";
            return false;
        }
    }

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        properties[binder.Name] = value;
        this.OnPropertyChanged(binder.Name);
        return true;
    }

    public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
    {
        dynamic method = properties[binder.Name];
        result = method(args[0].ToString(), args[1].ToString());
        return true;
    }

    ///.... Rest of the class.
    }

当我从 xaml 绑定它时,TryGetMember 中的调试点不会触发。我错过了什么吗?

<DataTemplate x:Key="SearchResults">
    <Grid Width="294" Margin="6">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Margin="0,0,0,10" Width="40" Height="40">
            <Image Source="{Binding Path=Banner}" Stretch="UniformToFill"/>
        </Border>
        <StackPanel Grid.Column="1" Margin="10,-10,0,0">
            <TextBlock Text="{Binding SeriesName}" Style="{StaticResource BodyTextStyle}" TextWrapping="NoWrap"/>
            <TextBlock Text="{Binding Subtitle}" Style="{StaticResource BodyTextStyle}" Foreground="{StaticResource ApplicationSecondaryForegroundThemeBrush}" TextWrapping="NoWrap"/>
            <TextBlock Text="{Binding Overview}" Style="{StaticResource BodyTextStyle}" Foreground="{StaticResource ApplicationSecondaryForegroundThemeBrush}" TextWrapping="NoWrap"/>
        </StackPanel>
    </Grid>
</DataTemplate>

数据上下文设置为

public ObservableCollection<dynamic> SearchResults {get;set;}

and

 ICollection col = item.SearchResults;    
 this.DefaultViewModel["Results"] = col;  //this is the datacontext of the gridview

这是我用于动态绑定的解决方案。 绑定语法只需要包含[]:

public class DynamicLocalSettings : BindableBase
{
    public object this[string name]
    {
        get
        {
            if (ApplicationData.Current.LocalSettings.Values.ContainsKey(name))
                return ApplicationData.Current.LocalSettings.Values[name];
            return null;
        }
        set
        {
            ApplicationData.Current.LocalSettings.Values[name] = value;
            OnPropertyChanged(name);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以在 WinRT / Windows 8 Store 应用程序中绑定 DynamicObject 的相关文章

随机推荐