gpt4 book ai didi

c# - 当我更改绑定(bind)页面属性时,为什么我在 wpf 中的主窗口没有更新?

转载 作者:行者123 更新时间:2023-12-03 10:42:41 24 4
gpt4 key购买 nike

在我的 MainWindow.xaml 中,我有:

<Frame Grid.Row="1" Content="{Binding MainWindowModelData.ContentView}"/>

在我的 MainWindowModelData 中,我有一个名为 ContentView 的属性:
private Page _ContentView;
public Page ContentView
{
get
{
if (_ContentView == null)
{
LicenceManagerModel pModel = new LicenceManagerModel();
LicenceManagerViewModel pViewModel = new LicenceManagerViewModel(pModel);
LicenceManagerView pView = new LicenceManagerView();
pView.DataContext = pViewModel;

_ContentView = pView;
}
return _ContentView;
//return _ContentView ?? (_ContentView = new Page());
}
set
{
Set(ref _ContentView, value);
}
}

到目前为止,LicenceManagerView 的文本正在构建中。
设置(引用 _ContentView,值);将引发属性(property)变更事件

当程序启动时,设置 ContentView 并显示“正在 build 中”(它显然有对 LicenceManagerView 的引用。

在 MainWindowModel 我有一些代码来更改此 ContentView 属性:
MenuModel pModel = new MenuModel();
MenuViewModel pViewModel = new MenuViewModel(pModel);
MenuView pView = new MenuView();
pView.DataContext = pViewModel;

ContentView = pView;

ContentView 属性被提升和更改。

问题:ContentView 现在指向一个 MenuView,但主窗口一直显示来自 LicenseManagerView 的“正在 build 中”。

到底是怎么回事?

最佳答案

我通过实现以下解决了这个问题:
1:MainWindow 将加载一个 MenuView
2:MenuView 顶部有按钮,下方有主要内容。
3、MenuView模型有一个属性ContentView(带有propertyChange事件)
4. 当点击不同的菜单按钮时,ContentView 被设置为不同的 view-viewmodel-model

注意:所有都是代码片段,而不是为简洁起见的完整代码。

主窗口:

<DockPanel>
<Frame x:Name="MainWindowFrame" NavigationUIVisibility="Hidden"/>
</DockPanel>

MainWindow 后面的代码 :
    private void PageLoaded(object sender, RoutedEventArgs e)
{
MenuModel pModel = new MenuModel();
MenuViewModel pViewModel = new MenuViewModel(pModel);
MenuView pView = new MenuView();
pView.DataContext = pViewModel;
MainWindowFrame.Content = pView;
}

MenuView 有:
<Frame Content="{Binding MenuModelData.ContentView}"/>

MenuModel 有:
    private Page _ContentView;
public Page ContentView
{
get
{
if (_ContentView == null) { _ContentView = ViewLicenceManager; }
return _ContentView;
}
set
{
Set(ref _ContentView, value);
}
}

MenuViewModel
    internal sealed class MenuViewModel
{
public MenuViewModel()
{

}

public MenuViewModel(MenuModel wModel)
{
if (wModel == null) { return; }
MenuModelData = wModel;
}

private MenuModel _MenuModelData;
public MenuModel MenuModelData
{
get
{
if (_MenuModelData == null) { _MenuModelData = new MenuModel(); }
return _MenuModelData;
}
set
{
MenuModelData = value;
}
}

}

关于c# - 当我更改绑定(bind)页面属性时,为什么我在 wpf 中的主窗口没有更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48219433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com