WPF数据绑定,第二次查看

0

的问题

我必须花一点点过了一天,在这个问题上我绝对一无所知。 如果我点击按钮以示的第二种观点打开它,但是没有内容。 我甚至还得到由一个断点的视图模型。 为此,我已经减少一切,一个简单文本框和文本块,闭上显示同样的数据,但他们不这样做。 它们显示没有什么即使后输入到该框块不更新。 但是,我曾经尝试的数据绑定不起作用。 任何人都不会有一个想法?

在此先感谢

我的第二个图

<Window x:Class="AoE4_BO_Overlay.Views.EditorView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:AoE4_BO_Overlay.Views" xmlns:viewmodels="clr-namespace:AoE4_BO_Overlay.ViewModels" d:DataContext="{d:DesignInstance Type=viewmodels:EditorViewModel}"
    mc:Ignorable="d"
    Title="EditorView" Height="450" Width="800">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="auto" />
        <ColumnDefinition Width="20" />
        <ColumnDefinition Width="20" />
    </Grid.ColumnDefinitions>

    <Grid.RowDefinitions>
        <RowDefinition Height="20" />
        <RowDefinition Height="auto" />
        <RowDefinition Height="auto" />
        <RowDefinition Height="20" />
    </Grid.RowDefinitions>
    <TextBlock Text="{Binding Path=FirstName}" Grid.Column="0" Grid.Row="2"/>
    <TextBox Text="{Binding Path=FirstName , Mode=OneWay}" Grid.Column="0" Grid.Row="1"/>
</Grid>

我的视图模型

    internal class EditorViewModel : Conductor<object>
{
    private string _firstName = "Tom";
    public EditorViewModel()
    {
    }

    public string FirstName
    {
        get
        {

            return _firstName;
        }
        set
        {
            _firstName = value;
            NotifyOfPropertyChange(() => FirstName);
        }
    }
}

我如何叫他们两个

        public void CreateBO_Click(object sender, RoutedEventArgs e)
    {
        EditorView createBO = new EditorView();
        ActivateItemAsync(new EditorViewModel());
        createBO.Show();
    }

增加的信息

    public partial class EditorView : Window
{
    public EditorView()
    {
        DataContext = new EditorViewModel();
        InitializeComponent();
    }
}
c# caliburn.micro data-binding wpf
2021-11-22 11:39:16
2

最好的答案

0

你有两个单独的问题:

1. 输入该文本不会改变的结财产:

这是预期的,因为你使用"单向"结合明确。 单向的结合意味着财产的更新的用户界面,但不是周围的其他方法。 如此改变名字应更新文本,但是改变该文本没有更新FirstName。

有趣的是,如果你只是忽略 Mode = OneWay 一部分,应工作由于文本框应使用双向结合的默认。 我建议你定义的文本框明确地结合作 Mode = TwoWay

2. 你看始一个空文本块/文

这是一个困难,因为你不告诉我们你在哪里设置你的属性. 这通常发生在我身上的时候我设定的属性之后 InitializeComponent(),而不是之前。 你要么设置的属性之前,结合初始化(为部分InizializeComponent()),或提出一个NotifyPropertyChanged你的财产到更新UI之后。

如果这不是原因,你可能想要使WPF约束力的错误在你出台-这通常会给你一个很好的想法在您的绑定会失败。 Visual Studio有一个选项。 它应该位于这里:

工具->的选择->调试->输出窗>WPF跟踪设置 ->的数据结合->所有

2021-11-22 12:54:14

首先,非常感谢你对你的答案。
rapta asdaf

非常感谢! 我需要搜索一下,但我找到它。 "属性=new EditorViewModel();"是我失踪了。
rapta asdaf

这听起来并不正确的。 你确定一个新的实例EditorViewModel是你想要什么? 通常,方法是使用 DataContext = this; 之前 InitializeComponent();
Shrimperator

确定吗? 没有。 我读了一点,并试图什么工作。 我的解决方案产生期望的结果。 如果我代替 new EditorViewModel()this 它不工作了。 我不知道如果这是无能为力但我用Caliburn.微型项目。 只是为了额外信息,我添加这类问题成的员额。
rapta asdaf
0

我相信你什么都试图在这里是为了表明你的第二个视(EditorView)内的第一个(而不是作为一个弹-如果你打算把它作为弹,使用 WindowManager 而不是的 ActivateItemAsync).

有一件事你需要改变使这可能是确保你的第二个观点是一个用户控件并不是一个窗口。

// EditorView.xaml.cs
public partial class EditorView : UserControl

// EditView.xaml
<UserControl x:Class="AoE4_BO_Overlay.Views.EditorView"

还因为你使用 ActivateItemAsync你会需要确保你的属性包含一个ContendControl名称"ActiveItem".

// FirstView.xaml
<ContentControl x:Name="ActiveItem"/>

呼叫 ActivateItemAsync 会使用这个控制载的看你的第二个模型(EditorViewModel). 这个地方,你现在可以使用 ActivateItemAsync 方法载的看法。

public async Task CreateBO_Click(object sender, RoutedEventArgs e)
{
   await ActivateItemAsync(new EditorViewModel());
}

请注意,方法 ActivateItemAsync 支持异步通话,这将是明智的呼吁的方法是异步的。

还有一点要注意的是,你不需要指定的属性明确如OP如果您使用的是Caliburn微型和图/这个例子都是保存在该建议的文件夹/名称空间结构。 Caliburn微型使用的命名约定相关联的适当视图模型对。 更多信息同样可以发现 正式文件

2021-11-23 06:48:07

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................