gpt4 book ai didi

c# - View 模型 (WPF) 中的 UI 更新命令

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

我正在制作一个基于 MVVM 模式的 WPF 应用程序,其中用户单击树的项目(由颜色名称组成的超链接,具有相应前景的名称文本)到 改变整个窗口的背景。 我正在通过中继命令执行此操作,但 UI 在我正在编写命令的 View 模型中是 Not Acceptable 。

XAML 中具有颜色名称的树:

<TreeView Name="tree" ItemSource="{Binding colorList, Mode=TwoWay}" Background="Transparent">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemSource={Binding Children}>
<TextBlock><Hyperlink Command={Binding ColorChangerCommand} Foreground={Binding Foreground} TextDecorations="None"><TextBlock Text={Binding Name}/></Hyperlink></TextBlock>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
<TreeView>

我的 View 模型中的命令:
public RelayCommand ColorChangerCommand{ get; set;}

public TreeViewModel() //Constructor of the View Model
{
ColorChangerCommand= new RelayCommand(ChangeColor);
}

public void ChangeColor(object sender)
{
this.Background= (sender as TreeViewItem).Foreground;
}

该命令在简单的代码隐藏中运行良好,但现在不在 View 模型中。请帮忙?

最佳答案

this.BackgroundBackground您的 View 模型的属性,前提是 ChangeColor方法属于 View 模型类。要更改窗口的背景,您需要将其绑定(bind)到 Background View 模型的属性并引发一个事件来告诉 UI 更新。这需要您的 View 模型实现 INotifyPropertyChanged事件:

public class ViewModel : INotifyPropertyChanged
{
public RelayCommand ColorChangerCommand { get; set; }

public TreeViewModel() //Constructor of the View Model
{
ColorChangerCommand = new RelayCommand(ChangeColor);
}

public void ChangeColor(object sender)
{
this.Background = (sender as TreeViewItem).Foreground;
}

private Brush background= Brushes.White;
public Brush Background
{
get { return background; }
set { Background = value; NotifyPropertyChanged(Background); }
}

public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}

XAML:
<Window .... Background="{Binding Background}" />

您还需要设置 DataContext窗口的一个实例到你的 View 模型类的一个实例并绑定(bind) Command Hyperlink 的属性(property)像这样:
<Hyperlink Command="{Binding DataContext.ColorChangerCommand, RelativeSource={RelativeSource AncestorType=Window}}" 
Foreground="{Binding Foreground}" TextDecorations="None">

关于c# - View 模型 (WPF) 中的 UI 更新命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55176835/

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