gpt4 book ai didi

c# - 用户控件数据上下文绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 10:58:01 25 4
gpt4 key购买 nike

我的解决方案中有三个项目:

  • 我的主 WPF 应用程序包含 MainWindow + MainViewModel
  • 带有用户控件的用户控件库 (ConfigEditorView)
  • UIProcess 类与 UserControl 的 ViewModel (ConfigEditorViewModel)

  • 在我的 MainWindow 中,我想将 UserControl 与 UIProcess 的 ViewModel 一起使用。

    首先,我在 MainWindow 中设置 UserControl:
    <TabItem Header="Editor">
    <Grid>
    <cel:ConfigEditorView DataContext="{Binding ConfEditModel, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
    </Grid>
    </TabItem>

    我不知道我在这里需要哪些属性,所以我将所有这些属性放在一起,但它仍然不起作用。

    然后我在我的 MainViewModel 中设置了这个:
    public ConfigEditorViewModel ConfEditModel { get; set; }

    使用绑定(bind)到按钮的简单方法:
    private void doSomething()
    {
    ConfEditModel = new ConfigEditorViewModel("Hello World");
    }

    我的 ConfigEditorViewModel 看起来基本上是这样的:
    public class ConfigEditorViewModel : ViewModelBase
    {
    private string _Description;
    public string Description
    {
    get
    {
    return _Description;
    }
    set
    {
    _Description = value;
    base.RaisePropertyChanged();
    }
    }

    public ConfigEditorViewModel(string t)
    {
    Description = t;
    }
    }

    描述绑定(bind)到我的用户控件中的文本框。
    <TextBox Grid.Row="1" Grid.Column="1" Margin="0,0,0,10" Text="{Binding Description}"/>

    当我启动应用程序并单击按钮时,文本框应该包含“Hello World”,但它是空的。

    我做错了什么?

    最佳答案

    我给你一个笼统的回答:

    在“真实(您想与具有不同属性名称的不同 View 模型一起使用的用户控件)”用户控件中 仅绑定(bind)到您自己的 DependencyProperties 你可以用 ElementName 或 RelativeSource 绑定(bind) 你应该 永远不要在用户控件中设置 DataContext .

     <UserControl x:Name="myRealUC" x:class="MyUserControl">
    <TextBox Text="{Binding ElementName=myRealUC, Path=MyOwnDPIDeclaredInMyUc, Path=TwoWay}"/>
    <UserControl>

    如果您这样做,您可以在任何 View 中轻松使用此用户控件,例如:
    <myControls:MyUserControl MyOwnDPIDeclaredInMyUc="{Binding MyPropertyInMyViewmodel}"/>

    并且为了完整性:依赖属性
        public readonly static DependencyProperty MyOwnDPIDeclaredInMyUcProperty = DependencyProperty.Register(
    "MyOwnDPIDeclaredInMyUc", typeof(string), typeof(MyUserControl), new PropertyMetadata(""));

    public bool MyOwnDPIDeclaredInMyUc
    {
    get { return (string)GetValue(MyOwnDPIDeclaredInMyUcProperty); }
    set { SetValue(MyOwnDPIDeclaredInMyUcProperty, value); }
    }

    关于c# - 用户控件数据上下文绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35085837/

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