gpt4 book ai didi

c# - 从 XAML 设置 ViewModel 的属性

转载 作者:行者123 更新时间:2023-11-30 14:17:29 25 4
gpt4 key购买 nike

我有一些 UserControl,它的 DataContext 绑定(bind)到 ViewModel,如何从 XAML 设置 ViewModel 的属性?可能吗?

更新:抱歉不是很清楚,我想得到这样的东西:UserControl 的 DataContext 绑定(bind)到 ViewModel,我需要将 ViewModel 的属性设置为某些东西(比方说,UserControl 的 Width 属性)。可能吗?

UPD2:这似乎是不可能的。我知道双向绑定(bind)模式等,我想做的事情 - 将 ViewModel 的属性设置为 UserControl 的属性

这个例子应该很清楚了

<Set Property={Binding SomePropertyOnViewModel} 
Value={Binding RelativeSource={RelativeSource Self},
Path=SomePropertyOnUserControl}>

最佳答案

我不确定我是否完全理解了这个问题。

但这是一个例子。它将:

  • 通过设置用户在用户控件内创建类型为 ExampleViewModel 的 View 模型控制 xaml 中的 DataContext 属性

  • 在 xaml 中创建一个文本框并将其绑定(bind)到 View 模型TextInViewModel 字符串属性。

  • 设置通常的 INotifyPropertyChanged 接口(interface)(这被提取到基类 ViewModelBase)

在 xaml 中创建 View 模型并为其设置用户控件数据上下文:

<UserControl x:Class="MyUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Test"
xmlns:viewModel="clr-namespace:ViewModels">
<UserControl.DataContext>
<viewModel:ExampleViewModel/>
</UserControl.DataContext>

<StackPanel Orientation="Horizontal" >
<Label>Enter Text here: </Label>
<TextBox Text="{Binding TextInViewModel}"></TextBox>
</StackPanel>
</UserControl>

View 模型:

public abstract class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

public void RaisePropertyChanged(string prop)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}

}


public class ExampleViewModel : ViewModelBase
{
/// <summary>
/// Property bound to textbox in xaml.
/// </summary>
public String TextInViewModel
{
get { return _textInViewModel; }
set
{
_textInViewModel= value;
RaisePropertyChanged("TextInViewModel");
}
}
private string _textInViewModel;

/// <summary>
/// Constructor.
/// </summary>
public ExampleViewModel()
{

}
}

关于c# - 从 XAML 设置 ViewModel 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5830199/

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