C# 将一个类中的控件与另一个类一起使用

C# 将一个类中的控件与另一个类一起使用,c#,wpf,class,object,mvvm,C#,Wpf,Class,Object,Mvvm,我不熟悉WPF和C。在另一个类中访问控件或对象(如文本框、按钮等)的最佳方式是什么。下面解释我的情况。如果这有什么不同,我也会使用MEF。任何帮助都将不胜感激。 多谢各位 EsriMapView.xaml是包含所有对象的位置。 这个类是EsriMapView.xaml.cs EsriMapViewModel.cs是我试图从中访问EsriMapView.xaml的另一个类。我在所有对象上收到的错误是当前上下文中不存在名称blank 以下是xaml类的代码: [Export] [PartCr

我不熟悉WPF和C。在另一个类中访问控件或对象(如文本框、按钮等)的最佳方式是什么。下面解释我的情况。如果这有什么不同,我也会使用MEF。任何帮助都将不胜感激。 多谢各位

EsriMapView.xaml是包含所有对象的位置。 这个类是EsriMapView.xaml.cs

EsriMapViewModel.cs是我试图从中访问EsriMapView.xaml的另一个类。我在所有对象上收到的错误是当前上下文中不存在名称blank

以下是xaml类的代码:

[Export]
    [PartCreationPolicy(CreationPolicy.NonShared)]
    public partial class EsriMapView : DialogWindowBase
    {
        //private int? initialZoom = null;
        //private double? latitude = null;
        //private double? longitude = null;

        //private string json = string.Empty;
        //private ObservableCollection<LocationPoint> marks = null;
        //private bool isZoomToBounds = false;

        //private string startPoint = string.Empty;
        //private string endPoint = string.Empty;

        //private string searchPoint = string.Empty;

        public EsriMapView()
        {
            InitializeComponent();            
        }

        [Import]
        public EsriMapViewModel ViewModel
        {
            get
            {
                return this.DataContext as EsriMapViewModel;
            }
            set
            {
                this.DataContext = value;
            }
        }

    }
}

我也在使用MVVM。如果你需要更多的信息,请告诉我。再次感谢。

您不应该试图从视图模型访问视图。这打破了MVVM的一个原则,这使得测试VM变得困难。相反,VM应该公开视图绑定到的属性。然后,VM可以访问执行其工作所需的数据

作为一个简单的示例,假设您的视图模型需要知道当前的缩放级别才能执行某些计算。在视图模型中,您将有:

public double Zoom
{
    get { return this.zoom; }
    set
    {
        if (this.zoom != value)
        {
            this.zoom = value;
            this.RaisePropertyChanged(() => this.Zoom);
        }
    }
}

private void DoSomeCalculation()
{
    // can use this.zoom here
}
那么,在你看来:

<Slider Value="{Binding Zoom}"/>

那么,您认为我应该如何启用和禁用某些objects@JLott:同样,在启用控件的情况下,VM会公开属性(可能是布尔属性),并且视图绑定到这些属性(可能是在这种情况下启用的)。在这种情况下,您将需要绑定上的转换器,因为源类型bool与目标类型Visibility不匹配。看,谢谢。这非常有帮助: