Как задать значение для отображения связанных свойств в режиме разработки WPF?
Мое связанное содержимое отображается в виде строки empty в режиме проектирования пользовательского интерфейса. Я хочу показать некоторую фальшивую ценность для этого содержимого, но я не знаю, как это сделать.
Пожалуйста, поделитесь, если вы знаете, как это сделать. Спасибо!
4 ответов:
Простой способ получить данные о времени разработки в Visual Studio 2010-это использовать design-datacontext. Краткий пример с окном и ViewModel, для DataContext, d: DataContext будет использоваться в режиме разработки, а StaticResource будет использоваться во время выполнения. Вы также можете использовать отдельный ViewModel для проектирования, но в этом примере я буду использовать один и тот же ViewModel для обоих.
<Window ... xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:DesignTimeData" mc:Ignorable="d" d:DataContext="{d:DesignInstance local:MyViewModel, IsDesignTimeCreatable=True}"> <Window.Resources> <local:MyViewModel x:Key="MyViewModel" /> </Window.Resources> <Window.DataContext> <StaticResource ResourceKey="MyViewModel"/> </Window.DataContext> <StackPanel> <TextBox Text="{Binding MyText}" Width="75" Height="25" Margin="6"/> </StackPanel> </Window>И в свойстве ViewModels MyText мы проверяем, находимся ли мы в режиме разработки, и в этом случае мы возвращаем что-то еще.
public class MyViewModel : INotifyPropertyChanged { public MyViewModel() { MyText = "Runtime-Text"; } private string m_myText; public string MyText { get { // Or you can use // DesignerProperties.GetIsInDesignMode(this) if (Designer.IsDesignMode) { return "Design-Text"; } return m_myText; } set { m_myText = value; OnPropertyChanged("MyText"); } } public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } }Дизайнер.cs, который находится здесь, выглядит так
public static class Designer { private static readonly bool isDesignMode; public static bool IsDesignMode { get { return isDesignMode; } } static Designer() { DependencyProperty prop = DesignerProperties.IsInDesignModeProperty; isDesignMode = (bool)DependencyPropertyDescriptor. FromProperty(prop, typeof(FrameworkElement)) .Metadata.DefaultValue; } }
Вы также можете использовать свойство FallbackValue для отображения чего-либо во время разработки. Но это также будет значение во время выполнения, если ваша привязка завершится неудачей.
<TextBox Text="{Binding MyText, FallbackValue='My Fallback Text'}"/>
Вы можете использовать свойство DesignMode, чтобы узнать, находитесь ли вы во время разработки (http://msdn.microsoft.com/en-us/library/c58hb4bw (vs.71). aspx )
Есть дальнейшие мысли, но нет реальных выводов о способах сделать это в этом вопросе: какие подходы доступны для фиктивных данных времени проектирования в WPF?
Вы можете обернуть содержимое в другое свойство и проверить, пусто ли значение. В этом случае верните фальшивое значение, которое вы хотите.
private string _content; public string Content { get { if (_content != "") return _content; else return "FAKE"; } set { _content= value; } }
Comments