gpt4 book ai didi

c# - 从代码背后在Viewmodel中设置属性

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

我认为我现在对此考虑过多,但是我有一个独特的情况。

我正在显示一个表和该表中的字段:

XAML:

        <TreeView x:Name="myTreeView" PreviewMouseDoubleClick="myTreeView_MouseLeftButtonDown" SelectedValuePath="Name" ItemsSource="{Binding Fields}" ItemContainerStyle="{StaticResource TreeViewItemExpandedStyle}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Fields}">
<StackPanel Orientation="Horizontal">
<TextBlock Foreground="Black" Text="{Binding Table}" />
</StackPanel>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button BorderBrush="Transparent"
Background="White"
Command="">
<StackPanel>
<Path Margin="5"
Data="M0,5 H10 M5,5 V10Z"
Stroke="#2283B4"
StrokeThickness="1"
Height="10"
Width="10" />
</StackPanel>
</Button>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" />
<TextBlock Height="0" Width="0" Visibility="Collapsed" Text="{Binding Table}"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
<!--<HierarchicalDataTemplate.Triggers>
<DataTrigger Binding="{Binding IsExpanded}" Value="True">
<Setter TargetName="treeIcon"
Property="Data"
Value="M0,5 H10"/>
</DataTrigger>
</HierarchicalDataTemplate.Triggers>-->
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>

</TreeView>

示例: TreeView

这些树 View 也是它们自己的用户控件。我遇到的问题是我需要能够在另一个 View 模型中使用所选的树 View 项目。除了通过后面的代码,我还没有找到其他方法来获取选定的treeview项和父项。下面是此控件后面的我的完整代码。

SourceRowUserControl.xaml.cs:
using Alliance.FromAnywhereControl.Models;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Alliance.FromAnywhereControl.ViewModels;
using System.Reflection;

namespace Alliance.FromAnywhereControl
{
/// <summary>
/// Interaction logic for SourceRowUserControl.xaml
/// </summary>
public partial class SourceRowUserControl : UserControl
{
public SourceRowUserControl()
{
InitializeComponent();
}

private ObservableCollection<ConversionRowUserControl> ConversionTypes = new ObservableCollection<ConversionRowUserControl>();

public ObservableCollection<TableInformation> Fields
{
get { return (ObservableCollection<TableInformation>)GetValue(FieldsProperty); }
set { SetValue(FieldsProperty, value); }
}

// Using a DependencyProperty as the backing store for Fields. This enables animation, styling, binding, etc...
public static readonly DependencyProperty FieldsProperty =
DependencyProperty.Register("Fields", typeof(ObservableCollection<TableInformation>), typeof(SourceRowUserControl), new PropertyMetadata(TableInformation.GetAll(null, null, null, null)));


public String FileTypeImage
{
get { return (String)GetValue(FileTypeImageProperty); }
set { SetValue(FileTypeImageProperty, value); }
}

// Using a DependencyProperty as the backing store for FieldTypeImage. This enables animation, styling, binding, etc...
public static readonly DependencyProperty FileTypeImageProperty =
DependencyProperty.Register("FileTypeImage", typeof(String), typeof(SourceRowUserControl), new PropertyMetadata("File Type Image"));

public SolidColorBrush SpacerColor
{
get { return (SolidColorBrush)GetValue(SpacerColorProperty); }
set { SetValue(SpacerColorProperty, value); }
}

// Using a DependencyProperty as the backing store for SpacerColor. This enables animation, styling, binding, etc...
public static readonly DependencyProperty SpacerColorProperty =
DependencyProperty.Register("SpacerColor", typeof(SolidColorBrush), typeof(SourceRowUserControl), new PropertyMetadata(new SolidColorBrush(Colors.Red)));


public String MiddleLabel
{
get { return (String)GetValue(MiddleLabelProperty); }
set { SetValue(MiddleLabelProperty, value); }
}

// Using a DependencyProperty as the backing store for MiddleLabel. This enables animation, styling, binding, etc...
public static readonly DependencyProperty MiddleLabelProperty =
DependencyProperty.Register("MiddleLabel", typeof(String), typeof(SourceRowUserControl), new PropertyMetadata("Middle Label"));

private void myTreeView_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
try
{

Field selectedField = new Field();

selectedField = (Field)myTreeView.SelectedItem;

ConversionViewModel cvm = new ConversionViewModel();

cvm.AddConversionType(selectedField.Table, selectedField.Name);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

}
}

myTreeViewLeftButtonDown事件是我要获取所选字段和表的位置。如您所见,然后我在另一个 View 模型中调用一个方法,但是由于它创建了一个新实例,因此无法按我的意愿运行。我只是将其放在那里以基本上显示出我想做的事情。概述,我需要能够在未连接到 View 的 View 模型中的代码后面使用字段。

如果您需要更多信息或想查看更多代码,请告诉我。提前致谢!

最佳答案

查看您的代码,而不是定义新的ConversionViewModel(),而是获取ConversionViewModel的实例,然后在其上设置属性。

public class ConversionViewModel()
{
private static ConversionViewModel _this;
public ConversionViewModel()
{
InitializeComponent();
_this = this;
}

public static ConversionViewModel GetInstance()
{
return _this;
}

//Other prop and methods
}

private void myTreeView_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
try
{

Field selectedField = new Field();

selectedField = (Field)myTreeView.SelectedItem;

ConversionViewModel.GetInstance().AddConversionType(selectedField.Table, selectedField.Name);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

关于c# - 从代码背后在Viewmodel中设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31677639/

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