我有一个继承自ViewModelBase的Class。我需要从其他类设置getter setter。怎么弄这个
public class UserScreenViewModel : ViewModelBase
{
public UserScreenViewModel()
{
this.Items = new ObservableCollection<TabDataItem>();
try
{
.....
var allLayouts = context.PANEL_LAYOUTS;
foreach (var layouts in allLayouts)
{
TabDataItem item = new TabDataItem()
{
Header = layouts.Header,
};
this.Items.Add(item);
}
}
this.SelectedTabItem = this.Items[0];
}
}
public ObservableCollection<TabDataItem> Items { get; set; }
private TabDataItem selectedItem;
/// <summary>
/// Gets or sets the SelectedTabItem.
/// </summary>
public TabDataItem SelectedTabItem
{
get
{
return this.selectedItem;
}
internal set
{
if (this.selectedItem != value)
{
this.selectedItem = value;
OnPropertyChanged("SelectedTabItem");
}
}
}
}
现在我需要从其他类而不是“this.SelectedTabItem = this.Items [0]”设置SelectedTabItem。怎么做到这一点?
答案 0 :(得分:0)
喜欢这个
public class NotificationClass : INotifyPropertyChanged
{
private TabDataItem selectedItem;
protected void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, e);
}
protected void OnPropertyChanged(string propertyName)
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
/// <summary>
/// Gets or sets the SelectedTabItem.
/// </summary>
public TabDataItem SelectedTabItem
{
get
{
return this.selectedItem;
}
internal set
{
if (this.selectedItem != value)
{
this.selectedItem = value;
OnPropertyChanged("SelectedTabItem");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
如果与特定属性
相关,则需要为此注册事件处理程序protected void OnSelectedTabItemChanged(EventArgs e)
{
EventHandler handler = SelectedTabItemChanged;;
if (handler != null)
handler(this, e);
}
public event EventHandler SelectedTabItemChanged;
在你想要引发事件并调用你的函数的类中为这个注册处理函数。
答案 1 :(得分:0)
正如我从你的评论中所理解的那样,我认为你应该这样做:
public class UserScreenViewModel : ViewModelBase
{
public void SetSelectedTabItem()
{
this.SelectedTabItem = this.Items[0];
}
}
public class NewClass
{
public UserScreenViewModel UserViewModel {get; set;}
public NewClass(UserScreenViewModel userViewModel)
{
this.UserViewModel = userViewModel;
this.UserViewModel.SetSelectedTabItem();
}
}
显然,你需要在UserScreenViewModel
的属性中引用NewClass
的当前实例,你可以在程序初始化中,在主视图后面的代码中使用,这个伪代码:
public class MainView
{
public MainView()
{
InitializeComponent();
var userViewModel = new UserScreenViewModel();
this.DataContext = userViewModel();
var newClass = new NewClass(userViewModel);
}
}
无论如何,我建议采用这种方法,因为不清楚为什么要尝试这样做,而不是直接访问属性设置器。我想也许是因为你使用了几个项目,这可能是选择internal
访问修饰符的原因。你需要澄清你的问题。