Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WinUI3 TabView XAML不更新视图中的数据绑定_C#_Xaml_Uwp_Winui 3 - Fatal编程技术网

C# WinUI3 TabView XAML不更新视图中的数据绑定

C# WinUI3 TabView XAML不更新视图中的数据绑定,c#,xaml,uwp,winui-3,C#,Xaml,Uwp,Winui 3,目前正在使用C#、WinUI3和XAML开发一个简单的UWP应用程序。非常像微软在这里所做的新改变。然而,我遇到了一些奇怪的绑定问题,我无法理解。我使用的是简单的observeCollectionProfileTabs,它应该用一个选项卡初始化,并显示在muxs.TabView中。我只是直接遵循了XAML控件Galary中的示例(&) XAML代码 <TabView Grid.Row="1" TabItemsSource="{x:Bind ProfileTab

目前正在使用C#、WinUI3和XAML开发一个简单的UWP应用程序。非常像微软在这里所做的新改变。然而,我遇到了一些奇怪的绑定问题,我无法理解。我使用的是简单的
observeCollectionProfileTabs
,它应该用一个选项卡初始化,并显示在
muxs.TabView
中。我只是直接遵循了XAML控件Galary中的示例(&)

XAML代码

<TabView Grid.Row="1" TabItemsSource="{x:Bind ProfileTabs, Mode=OneWay}" AddTabButtonClick="TabView_AddButtonClick" TabCloseRequested="TabView_TabCloseRequested">
  <TabView.TabItemTemplate>
    <DataTemplate x:DataType="local:ProfileTab">
      <muxc:TabViewItem Header="{x:Bind TabHeader}" IconSource="{x:Bind TabIconSource}" Content="{x:Bind TabContent}" />
    </DataTemplate>
  </TabView.TabItemTemplate >
</TabView>
public class ProfileTab
{
    public string TabHeader { get; set; }
    public IconSource TabIconSource { get; set; }
    public object TabContent { get; set; }
}

public sealed partial class MainPage : Page
{
    public ObservableCollection<ProfileTab> ProfileTabs { get; set; }

    public MainPage()
    {
        this.InitializeComponent();
        InitializeSampleProfile();
    }

    private void TabView_AddButtonClick(TabView sender, object args)
    {
        var profile = new SettingsProfile("");
        ProfileTabs.Add(CreateNewTab(profile));
    }

    private void TabView_TabCloseRequested(TabView sender, TabViewTabCloseRequestedEventArgs args)
    {
        ProfileTabs.Remove(args.Item as ProfileTab);
    }

    private ProfileTab CreateNewTab(SettingsProfile profile)
    {
        var profileTab = new ProfileTab
        {
            TabHeader = $"{profile.PrettyName()}",
            TabIconSource = new SymbolIconSource() { Symbol = Symbol.Document },
        };

        // The content of the tab is a frame that contains a page, pass the profile as parameter
        Frame frame = new Frame();
        frame.Navigate(typeof(ProfilePage), profile);
        profileTab.TabContent = frame;

        return profileTab;
    }

    private void InitializeSampleProfile()
    {
        ProfileTabs = new ObservableCollection<ProfileTab>();

        // load sample data

        ProfileTabs.Add(CreateNewTab(defaultProfile));
    }
}

C#代码

<TabView Grid.Row="1" TabItemsSource="{x:Bind ProfileTabs, Mode=OneWay}" AddTabButtonClick="TabView_AddButtonClick" TabCloseRequested="TabView_TabCloseRequested">
  <TabView.TabItemTemplate>
    <DataTemplate x:DataType="local:ProfileTab">
      <muxc:TabViewItem Header="{x:Bind TabHeader}" IconSource="{x:Bind TabIconSource}" Content="{x:Bind TabContent}" />
    </DataTemplate>
  </TabView.TabItemTemplate >
</TabView>
public class ProfileTab
{
    public string TabHeader { get; set; }
    public IconSource TabIconSource { get; set; }
    public object TabContent { get; set; }
}

public sealed partial class MainPage : Page
{
    public ObservableCollection<ProfileTab> ProfileTabs { get; set; }

    public MainPage()
    {
        this.InitializeComponent();
        InitializeSampleProfile();
    }

    private void TabView_AddButtonClick(TabView sender, object args)
    {
        var profile = new SettingsProfile("");
        ProfileTabs.Add(CreateNewTab(profile));
    }

    private void TabView_TabCloseRequested(TabView sender, TabViewTabCloseRequestedEventArgs args)
    {
        ProfileTabs.Remove(args.Item as ProfileTab);
    }

    private ProfileTab CreateNewTab(SettingsProfile profile)
    {
        var profileTab = new ProfileTab
        {
            TabHeader = $"{profile.PrettyName()}",
            TabIconSource = new SymbolIconSource() { Symbol = Symbol.Document },
        };

        // The content of the tab is a frame that contains a page, pass the profile as parameter
        Frame frame = new Frame();
        frame.Navigate(typeof(ProfilePage), profile);
        profileTab.TabContent = frame;

        return profileTab;
    }

    private void InitializeSampleProfile()
    {
        ProfileTabs = new ObservableCollection<ProfileTab>();

        // load sample data

        ProfileTabs.Add(CreateNewTab(defaultProfile));
    }
}
公共类档案选项卡
{
公共字符串TabHeader{get;set;}
公共IconSource选项卡IconSource{get;set;}
公共对象选项卡内容{get;set;}
}
公共密封部分类主页面:第页
{
公共ObservableCollection配置文件选项卡{get;set;}
公共主页()
{
this.InitializeComponent();
初始化SampleProfile();
}
私有无效选项卡视图\添加按钮单击(选项卡视图发送者,对象参数)
{
变量配置文件=新设置配置文件(“”);
ProfileTabs.Add(CreateNewTab(profile));
}
private void TabView\u TabCloseRequested(TabView发件人,TabViewTabCloseRequestedEventArgs)
{
ProfileTabs.Remove(args.Item作为ProfileTab);
}
私有配置文件选项卡CreateNewTab(设置配置文件配置文件)
{
var profileTab=新建profileTab
{
TabHeader=$“{profile.PrettyName()}”,
TabIconSource=new SymbolIconSource(){Symbol=Symbol.Document},
};
//选项卡的内容是一个包含页面的框架,将配置文件作为参数传递
框架=新框架();
框架导航(typeof(ProfilePage),profile);
profileTab.TabContent=frame;
返回配置文件选项卡;
}
私有无效初始值SampleProfile()
{
ProfileTabs=新的ObservableCollection();
//加载样本数据
ProfileTabs.Add(CreateNewTab(defaultProfile));
}
}
现在默认选项卡已初始化,我觉得很棒!但无论何时单击“添加”或“删除”,都不会发生任何事情。我启动了调试器,事件被触发,
ObservableCollection
看起来确实在变化——添加和删除显示的选项卡。现在的问题是视图本身并没有改变——只是一个默认选项卡


有人能告诉我这个bug或解决方法吗?谢谢

我已经测试了上面的代码,它在我这边运行得很好,我已经制作了一个简单的示例,请检查一下


请注意
TabView
IconSource
位于
Microsoft.UI.Xaml.Controls
命名空间下,请不要使用
Windows.UI.Xaml.Controls
IconSource
替换,否则会键入异常。

我已经测试了上述代码,它在我这边运行良好,我做了简单的样品,请检查一下


请注意
TabView
IconSource
位于
Microsoft.UI.Xaml.Controls
命名空间下,请不要使用
Windows.UI.Xaml.Controls
IconSource
替换,否则会键入异常。

我已经用WinUI 2.4.3进行了测试,效果良好,我们无法重现您的问题,请分享有关您的项目目标min版本和WinUI版本的更多详细信息。@NicoZhu MSFT-Thx对于测试,感谢快速帮助和您的输入!我正在使用VS 2019版本16.8.1,.NET 5 SDK安装,该项目被设置为具有最新WinUI3预览的通用Windows应用程序。目标版本为10.0.18362.0,目标最低版本为10.0.17763.0。我使用与您相同的环境进行了测试,但我无法重现您的问题,我将共享代码示例,请尝试运行它并让我知道结果。这一个对我有效,现在的问题是出了什么问题,因为我还不能分辨代码中的任何差异。请分享您的代码示例,我将在此基础上进行编辑。我已经用WinUI 2.4.3进行了测试,效果很好,我们无法重现您的问题,请分享有关您的项目目标min版本和WinUI版本的更多详细信息。@NicoZhu MSFT-Thx对于测试,感谢快速帮助和您的输入!我正在使用VS 2019版本16.8.1,.NET 5 SDK安装,该项目被设置为具有最新WinUI3预览的通用Windows应用程序。目标版本为10.0.18362.0,目标最低版本为10.0.17763.0。我使用与您相同的环境进行了测试,但我无法重现您的问题,我将共享代码示例,请尝试运行它,并让我知道结果。这一个对我来说很有效,现在的问题是出了什么问题,因为我还不能分辨代码中的任何差异。请分享你的代码示例,我将在此基础上进行编辑。