gpt4 book ai didi

xaml - MVVM - 绑定(bind)到深度嵌套字符串时的基础知识

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

我正在尝试将字符串绑定(bind)到我的文本框控件,但字符串被埋没了。

我要使用的代码是以下人为的示例

namespace BackUps.Logging.ViewModel
{
class Obj1
{
public Obj2 obj2 { get; set; }
}

class Obj2
{
public Obj3 obj3 { get; set; }
}

class Obj3
{
public string Message
{
get { return "Hello World"; }
}
}

我的虚拟机看起来像
namespace BackUps.Logging.ViewModel
{
internal class LogsVM
{
public Obj1 Obj1 { get; private set; }

public LogsVM()
{
Obj1 = new Obj1();
}
}

我的问题是,如何使用 Xaml 将 Message 绑定(bind)到 TextBlock?这就是我所拥有的:
   <Window x:Class="BackUps.Logging.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:myData ="clr-namespace:BackUps.Logging.ViewModel"
Title="Logging Results" Height="350" Width="525">

<Grid DataContext="{x:Type myData:LogsVM}">
<TextBlock Text="{Binding Message}" />
</Grid>
</Window>

以上不起作用。也没有
<TextBlock Text="{Binding Obj1.Message}" />

或者
<TextBlock Text="{Binding Obj1.Obj2.Obj3.Message}" />

我知道这个例子很愚蠢,但是很多时候一个类的属性是一个 List 类型,而在那个 List 中是另一个等,并且知道如何深入到一个特定的属性,不管有多少层很重要,但我've得到无处找出如何。

最佳答案

假设数据上下文是您的 View 模型,则此方法有效:

<Window x:Class="WpfGridColumns.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" SizeToContent="WidthAndHeight"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:wpfGridColumns="clr-namespace:WpfGridColumns"
d:DataContext="{d:DesignInstance Type=wpfGridColumns:LogsVM, IsDesignTimeCreatable=True}"
>
<Grid>
<TextBox Text="{Binding Obj1.obj2.obj3.Message}" />
</Grid>
</Window>

您可以使用以下语法设置设计时数据:
d:DataContext="{d:DesignInstance Type=wpfGridColumns:LogsVM, IsDesignTimeCreatable=True}"
它在 VS 设计器中提供 Intellisense,并且在放置绑定(bind)时很有帮助。

我在后面使用了这段代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new LogsVM();
}
}

internal class LogsVM
{
public Obj1 Obj1 { get; private set; }

public LogsVM()
{
Obj1 = new Obj1();
}
}

public class Obj1
{
public Obj1()
{
obj2=new Obj2();
}
public Obj2 obj2 { get; set; }
}

public class Obj2
{
public Obj2()
{
obj3= new Obj3();
}
public Obj3 obj3 { get; set; }
}

public class Obj3
{
public Obj3()
{
Message = "Test";
}
public string Message { get; set; }
}

关于xaml - MVVM - 绑定(bind)到深度嵌套字符串时的基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14464243/

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