Как использовать StringFormat в элементах XAML?

Vanilla JavaScript

Всякий раз, когда вы используете import, он всегда будет преобразовываться в модуль. Однако вы можете использовать namespaces вместе с "module": "system", после чего его можно будет выводить в один файл (или несколько файлов).

Итак, для очень простого проекта у вас будет следующее:

tsconfig.json

{
  "compilerOptions": {
    "target": "es2016",
    "module": "system",
    "outFile": "./lib.js"
  },
  "include": [
    "./**/*.ts"
  ]
}

Затем вы создадите файлы, которые будут выглядеть следующим образом:

[ 1141] index.ts

namespace MyNamespace {
  // This is a private method that cannot be accessed in other files
  // the reason for that is because it isn't exported.
  function y() {
    alert("test");
  }

  x(y)
}

functions.ts

namespace MyNamespace {
  // This method can be referenced in other files because it is exported.
  export function x(callback: () => void): void {
    callback();
  }
}

Сгенерированный код браузера

var MyNamespace;
(function(MyNamespace) {
  function x(callback) {
    callback();
  }
  MyNamespace.x = x;
})(MyNamespace || (MyNamespace = {}));
var MyNamespace;
(function(MyNamespace) {
  function y() {
    alert("test");
  }
  MyNamespace.x(y);
})(MyNamespace || (MyNamespace = {}));
[1133 ]

Затем вы можете использовать эти методы / функции вне пространства имен, просто вызывая их через пространство имен:

MyNamespace.y()
MyNamespace.x(MyNamespace.y)
// etc.

Использование requirejs

Для использования import В рамках вашего проекта вам потребуется сторонняя библиотека requirejs . Это позволит вам использовать модули в браузере.

Итак, чтобы сделать это, нам сначала нужно иметь соответствующий конфигурационный файл, который выглядит примерно так, как показано выше, с единственным отличием - "module": "amd".

tsconfig.json

{
  "compilerOptions": {
    "target": "es2016",
    "module": "amd",
    "outFile": "./lib.js"
  },
  "include": [
    "./**/*.ts"
  ]
}

Далее нам нужно создать правильный основной файл машинописи:

index.ts

requirejs(['functions'], function (util: any) {
  function y() {
    alert("test");
  }

  util.x(y)
})

Поскольку используется третий партийная библиотека, она инициализируется по-разному (используя requirejs()). Это говорит requirejs, что это точка входа в приложение, поэтому это необходимо только один раз.

functions.ts

export function x(callback: () => void): void {
  callback();
}

Сгенерированный код браузера

define("functions", ["require", "exports"], function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    function x(callback) {
        callback();
    }
    exports.x = x;
});
requirejs(['functions'], function (util) {
    function y() {
        alert("test");
    }
    util.x(y);
});

If ваш скрипт находится во внешнем файле, вы можете использовать data-main в теге скрипта, requirejs автоматически загрузит файл.



Экспериментальные модули

Эта функция все еще экспериментальная и поддерживается не во всех браузерах . Все, что вам нужно сделать, это использовать атрибут type="module" в вашем теге скрипта:


tsconfig.json

Примечание: здесь мы используем оба разных target и module, а также outDir.
Примечание: es2016 не является допустимым типом модуля.

{
  "compilerOptions": {
    "target": "es2016",
    "module": "es2015",
    "outDir": "./lib"
  },
  "include": [
    "./**/*.ts"
  ]
}

index.ts

Примечание: import использует расширение .js, иначе браузер не сможет загрузить его, если у вас нет правил перезаписи.

]
import { x } from './functions.js'
function y() {
  alert("test");
}

x(y)

functions.ts

export function x(callback: () => void): void {
  callback();
}

Это выдаст почти то же самое, что и файлы ts (Stackoverflow не поддерживает внешние файлы js, если они не размещены где-то, поэтому здесь нет фрагмента): [ 1165]

// index.js
import { x } from './functions.js';
function y() {
    alert("test");
}
x(y);

// functions.js
export function x(callback) {
    callback();
}
53
задан Community 23 May 2017 в 01:54
поделиться

2 ответа

Я не протестировал его, но я думаю, что это должно работать:

<GridViewColumn
    Header="Order Date"
    DisplayMemberBinding=
        "{Binding Path=OrderDate, StringFormat='{}{0:dd.MM.yyyy}'}"/>
80
ответ дан Ryan Lundy 7 November 2019 в 08:34
поделиться

XAML

<UserControl.Resources>
    <myNamespace:DateTimeConverter x:Key="DateTimeConverter" />
</UserControl.Resources>

<GridViewColumn 
DisplayMemberBinding=="{Binding Path=OrderDate, Converter={StaticResource DateTimeConverter}}" 
/>

C#

public class DateTimeConverter : IValueConverter
{
    public object Convert(object value,
                       Type targetType,
                       object parameter,
                       CultureInfo culture)
    {
        if (value != null)
        {
            return ((DateTime)value).ToString("dd.MM.yyyy");
        }
        else
        {
            return String.Empty;
        }
    }

    public object ConvertBack(object value,
                              Type targetType,
                              object parameter,
                              CultureInfo culture)
    {
        return DateTime.Parse(value.ToString());
    }
}
3
ответ дан sipwiz 7 November 2019 в 08:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: