我有Request.xaml
按钮和许多combox,所以我想重新加载它并将combox值设置为在按钮点击后将其设置为默认值。我当然会做更多的工作人员。
我的Request.xaml
代码包含代码的这些部分:
<TextBox x:Name="TxtBlock_numRequest" TextWrapping="Wrap" Height="23"/>
<ComboBox x:Name="CmbBox_lvlPriority" Width="160">
<ComboBoxItem Content="1" Name="High" />
<ComboBoxItem Content="2" Name="Medium" />
<ComboBoxItem Content="3" Name="Low" />
</ComboBox>
此外,xaml代码如 event <Button Content="Next request" Width="160" VerticalAlignment="Bottom" Background="#FF339933" Click="Button_Click" />
Request.xaml.cs
文件只有private void Button_Click(object sender, RoutedEventArgs e)
个功能。
我以这种方式显示Request.xaml
:首先,MainWindow.xaml
显示MainPage.xaml
,
<mui:Link DisplayName="Generation" Source="/Pages/MainPage.xaml" />
,
最后MainPage.xaml
发送Request.xaml
`
是否可以重置整个页面,因为我需要让用户有机会将新请求的参数添加到现有参数中,这些参数最终将位于.xml
文件中?
可以通过 OnNavigatedTo方法或 UIElement.InvalidateVisual方法(http://msdn.microsoft.com/en-us/library/system.windows.uielement.invalidatevisual.aspx)
来实现答案 0 :(得分:2)
当然可以!但是......你是否将组合框数据化为一些底层对象实例?
然后你可以很容易地做到这一点&#34; hard&#34;方式和设置
page.DataContext = null;
page.DataContext = new Foo();
然后将使用&#34;默认&#34;重新初始化所有数据绑定。值。
答案 1 :(得分:1)
到目前为止,我没有使用MVVM / DataContext,因此在特定情况下,只有一种方法可以将值设置为默认值,而是手动执行。
TxtBlock_numRequest.Text = "Default";
但是这个解决方案看起来很糟糕,但至少它可行。
解决此问题的另一种方法是使用MVVM和DataBinding。该解决方案由@ZeroART提供:
//XAML
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<TextBox x:Name="TextBox1" Width="200" HorizontalAlignment="Left" Text="{Binding TextValue, UpdateSourceTrigger=PropertyChanged}"></TextBox>
<ComboBox x:Name="ComboBox1" HorizontalAlignment="Left" ItemsSource="{Binding Items}" SelectedValue="{Binding SelectedValue, UpdateSourceTrigger=PropertyChanged}" Width="200"/>
<Button x:Name="Button1" HorizontalAlignment="Left" Content="Save" Command="{Binding ClickCommand}" Width="116"/>
</StackPanel>
</Window>
//
//
//ViewModel
public class MainViewModel : INotifyPropertyChanged
{
private IList<string> _items;
private bool _canExecute;
private ICommand _clickCommand;
private string _textValue;
private string _selectedValue;
public IList<string> Items
{
get { return _items; }
}
public string SelectedValue
{
get { return _selectedValue; }
set
{
_selectedValue = value;
OnPropertyChanged("SelectedValue");
}
}
public string TextValue
{
get { return _textValue; }
set {
_textValue = value;
OnPropertyChanged("TextValue");}
}
public void Save()
{
SelectedValue = _items.FirstOrDefault();
TextValue = "Значение по умолчанию";
}
public ICommand ClickCommand
{
get { return _clickCommand ?? (new RelayCommand(() => Save(), _canExecute)); }
}
public MainViewModel()
{
_items = new List<string> { "Test1", "Test2", "Test3" };
_selectedValue = _items.First();
_textValue = "Значение по умолчанию";
_canExecute = true;
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
public class RelayCommand : ICommand
{
private Action _action;
private bool _canExecute;
public RelayCommand(Action action, bool canExecute)
{
_action = action;
_canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return _canExecute;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
_action();
}
}
另外我们需要这个:
private readonly MainViewModel _viewModel;
public MainWindow()
{
InitializeComponent();
_viewModel = new MainViewModel();
this.DataContext = _viewModel;
}
答案 2 :(得分:1)
如果要保留在同一页面上但清除所有字段(例如,如果该页面的DataContext需要使用参数来创建),则只需将类似方法添加到页面或用户控件的... xaml中。 CS文件:
private void Clear(object sender, RoutedEventArgs e)
{
this.DataContext = null;
}